这是我目前有:如何在Python中掩盖不在第二个数组中的数组元素?
x = range(10)
x2 = array(x)
y = [3,6,8]
for i in range(len(x)):
x2[i] = x2[i] in y
x = ma.masked_where(x2 == False, x)
这让我我想要的,但我想没有循环这样做。 任何方式来掩盖数组x中的值不存在于y?
这是我目前有:如何在Python中掩盖不在第二个数组中的数组元素?
x = range(10)
x2 = array(x)
y = [3,6,8]
for i in range(len(x)):
x2[i] = x2[i] in y
x = ma.masked_where(x2 == False, x)
这让我我想要的,但我想没有循环这样做。 任何方式来掩盖数组x中的值不存在于y?
这种使用列表理解的方法不依赖于任何numpy结构。它让数量,如果它在y
,和如果不是
x = [i if i in y else '-' for i in range(10)]
输出
['-', '-', '-', 3, '-', '-', 6, '-', 8, '-']
变化提出一个-
的“ - ”如果你想改变的面膜默认。
您可以使用set.intersection得到匹配的数字,它会回报你相匹配的值,它是不循环完成:
x = range(10)
y = [3,6,8]
s1 = set(x)
s2 = set(y)
s1.intersection(s2)
(Output:) set([8, 3, 6])
x = [1,2,3,4,5]
y = [2,3,6,7,8]
s1 = set(x)
s2 = set(y)
s1.intersection(s2)
(Output:) set([2, 3])
您可以通过铸造集获取列表:
y = list(s1.intersection(s2))
这很有用,但我需要将被屏蔽的数组作为输出,因为我需要将该掩码应用到另一个数组。除非你知道一种方法来产生一个只保留与数组相交索引相对应的元素的数组吗? –
您可以使用numpy
为您做循环,因此可以加速计算。
x = np.arange(10)
y = np.array([3,6,8])
mask = np.all(x!=y[:,None], 0)
x = np.ma.masked_where(mask,x)
这绝对是一个很好的备份。理想情况下,我不会循环,但这可能是我必须做的。谢谢! –
这似乎正是我想要的,但我需要能够掩盖此数组并将该掩码应用于另一个数组,然后最终压缩它们两者。知道任何方式来掩盖这一点?我试过masked_where并试图将该类型用作标志,并且我尝试了masked_value来指定' - ',但似乎没有任何工作。 –
等我拿到了!我只是将' - '改为float('nan')并使用了masked_invalid。谢谢! –