[英]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.