1

我已经导入了具有递增整数的 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]

但是我无法协调两个数组的不同长度和不匹配的索引,

谢谢你的帮助!

4

2 回答 2

3

确保data是一个数组:

data = np.asarray(data)

然后:

data[~masked.mask[data]]

这将非常快,尽管它确实假设您的掩码数组包含从 0 到至少 的所有数字max(data)

于 2017-09-14T14:14:08.660 回答
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]
>>>
于 2017-09-14T14:11:57.910 回答