使用区间来屏蔽numpy数组

4

我正在尝试使用一个包含范围的掩码文件来屏蔽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])]

显然,这样做行不通,因为时间和掩码的长度不同。是否有可能实现类似的功能?非常感谢您的帮助!
1个回答

4

给定一个数组:

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

还有一个由下限和上限(lu)组成的第二个数组,

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

遍历边界数组,并根据边界重新掩码数据数组。
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)

谢谢,比尔。我本来想避免这样做的,因为我希望有一个内置的Numpy操作。不管怎样,感谢您的确认! - ionick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接