2014-02-20 67 views
2

我想掩飾出一個numpy陣列的某些部分使用帶範圍的掩膜文件,我無法弄清楚如何有效地做到這一點。我有兩個包含數千個值的數組(時間和數據),然後是一個包含開始和結束時間的掩碼文件。我希望有一個簡單的方法來屏蔽任何開始和結束值之間的數組值。下面是一些僞代碼,以幫助概念化我正在嘗試做的事情。使用區間掩膜numpy陣列

# the mask file is two-column with start time and stop time 
mask = np.loadtxt(maskfile) 

time, data = np.loadtxt(datafile, unpack=True) 

data = data[(time > mask[:,0]) & (time < mask[:,1])] 

很明顯,這是行不通的,因爲時間和掩碼長度不一樣。

是這樣的可能嗎?任何幫助將不勝感激!

回答

3

給定一個陣列:

In [1]: x = np.arange(100).reshape(10, 10) 

和低的第二陣列和上界(lu

In [2]: y = np.array([[6, 11], [41, 47], [85, 98]]) 

迭代通過bounds陣列和(重新)掩模數據陣列根據邊界

In [3]: for l, u in y: 
    ....:  x = np.ma.masked_where((x > l) & (x < u), x) 
    ....: 

In [4]: x 
Out[4]: 
masked_array(data = 
[[0 1 2 3 4 5 6 -- -- --] 
[-- 11 12 13 14 15 16 17 18 19] 
[20 21 22 23 24 25 26 27 28 29] 
[30 31 32 33 34 35 36 37 38 39] 
[40 41 -- -- -- -- -- 47 48 49] 
[50 51 52 53 54 55 56 57 58 59] 
[60 61 62 63 64 65 66 67 68 69] 
[70 71 72 73 74 75 76 77 78 79] 
[80 81 82 83 84 85 -- -- -- --] 
[-- -- -- -- -- -- -- -- 98 99]], 
      mask = 
[[False False False False False False False True True True] 
[ True False False False False False False False False False] 
[False False False False False False False False False False] 
[False False False False False False False False False False] 
[False False True True True True True False False False] 
[False False False False False False False False False False] 
[False False False False False False False False False False] 
[False False False False False False False False False False] 
[False False False False False False True True True True] 
[ True True True True True True True True False False]], 
     fill_value = 999999) 
+0

謝謝比爾。我試圖避免這樣做,因爲我希望有一個內置的Numpy操作。無論如何,感謝您的確認! – ionick