我导入的数据格式为numpy蒙版数组的递增整数。掩蔽的元素是不规则的而不是重复的,例如印刷它产生:
masked = [0,1,--,3,--,5,6,--,--,9,--]
我还有另一个递增数字列表,它们不是从零开始,并且有不规则的间隙,与masked
的大小不同:
data = [1,3,4,6,7,9,10]
我想删除data
的任何元素,如果它的值是masked
中的屏蔽元素
所以我得到了:
result = [1,3,6,9]
因为4,7和10是masked
中的掩码值。
我认为我的伪代码应该类似于:
for i in len(masked):
if masked[i] = 'masked' && data[i] == [i]:
del data[i]
但是我无法协调两个阵列的不同长度和不匹配的索引,
感谢您的帮助!
答案 0 :(得分:2)
您可以使用set函数获取列表集并获取它们的交集。 这是一个演示: -
>>> import numpy as np
>>> import numpy.ma as ma
>>> arr = np.array([x for x in range(11)])
>>> masked = ma.masked_array(arr, mask=[0,0,1,0,1,0,0,1,1,0,1])
>>> masked
masked_array(data = [0 1 -- 3 -- 5 6 -- -- 9 --],
mask = [False False True False True False False True True False
True],
fill_value = 999999)
>>> data = np.array([1,3,4,6,7,9,10])
>>> result = list(set(data) & set(masked[~masked.mask]))
>>> result
[1, 3, 6, 9]
>>>
答案 1 :(得分:2)
确保data
是一个数组:
data = np.asarray(data)
然后:
data[~masked.mask[data]]
这将非常快,但它确实假设您的蒙面数组包含从0到至少max(data)
的所有数字。