2017-09-14 24 views
1

我已导入具有numpy masked阵列的递增整数格式的数据。掩蔽元件是不规则的,而不是重复,例如打印它产生:如果该值在另一个列表中被屏蔽,则从列表中删除元素

masked = [0,1,--,3,--,5,6,--,--,9,--]

我有递增不从零开始编号的另一个列表,并且具有不规则的间隙和距离masked不同尺寸:

data = [1,3,4,6,7,9,10]

我想如果它的值是masked

一个蒙面元素去除的 data任何元素

所以,我得到:

result = [1,3,6,9]

随着4,7和10 masked蒙面值。

我觉得我的伪代码应该是这个样子:

for i in len(masked): 
    if masked[i] = 'masked' && data[i] == [i]: 
     del data[i] 

但我无法调和的两个数组的长度不同和不匹配的指数,

感谢您的帮助!

回答

2

确保data是一个数组:

data = np.asarray(data) 

然后:

data[~masked.mask[data]] 

这将是非常快的,尽管它认为你的蒙面数组包含从0到至少max(data)的所有数字。

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] 
>>> 
+0

我得到一个错误'TypeError:不可取的类型:'MaskedConstant''任何想法? –

+0

上次编辑不正确,请尝试更新。对不起! –

相关问题