2017-09-14 62 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

上次編輯不正確,請嘗試更新。對不起! –

相關問題