[英]numpy: how to use masked_outside on certain columns of a numpy ndarray?
我想做的是使用masked_outside函數來掩蓋不在給定ndarray范圍內的值,如
import numpy as np
import numpy.ma as ma
a = np.zeros((3,3))
a[1,1] = -1
a[2,1] = 1
a[0,2] = 1
b = ma.masked_outside(a, 0, 0)
然后我得到:
a = array([[ 0., 0., 1.],
[ 0., -1., 0.],
[ 0., 1., 0.]])
b = masked_array(data =
[[0.0 0.0 --]
[0.0 -- 0.0]
[0.0 -- 0.0]],
mask =
[[False False True]
[False True False]
[False True False]],
fill_value = 1e+20)
但是,我想從屏蔽中排除某些列,例如:
b = ma.masked_outside(a, 0, 0, exclude_cols=[2, ])
我該如何實現?
如果數組具有非平凡的dtype,即具有命名字段的數組,該怎么辦?
我認為numpy中沒有內置任何東西,但是手動構建蒙版應該不難。 這樣的事情行嗎? 該函數像masked_outside
一樣構建布爾數組,並使用False
填充排除的列
In [66]: def make_mask_outside(data, lower, upper, exclude_cols=None):
...: mask = (data < lower) | (data > upper)
...: if exclude_cols is not None:
...: for c in exclude_cols:
...: mask[:,c] = False
...: return mask
In [67]: b = ma.masked_array(a, make_mask_outside(a, 0, 0, [2,]))
In [68]: b
Out[68]:
masked_array(data =
[[0.0 0.0 1.0]
[0.0 -- 0.0]
[0.0 -- 0.0]],
mask =
[[False False False]
[False True False]
[False True False]],
fill_value = 1e+20)
您可以將掩碼與多種條件一起使用,並且在其中一種條件中考慮要排除的列號:
rows, cols = np.indices(a.shape)
b = np.ma.array(a, mask=((a!=0) & (cols!=2)))
#masked_array(data =
# [[0.0 0.0 1.0]
# [0.0 -- 0.0]
# [0.0 -- 0.0]],
# mask =
# [[False False False]
# [False True False]
# [False True False]],
# fill_value = 1e+20)
這可以擴展到更多列,例如: mask=((a!=0) & (cols!=2) & (cols!=3))
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.