这是功能还是错误?有人可以向我解释 numpy masked_array 的这种行为吗?它似乎在应用求和操作后更改了 fill_value,如果您打算使用填充结果,这会造成混淆。
data=ones((5,5))
m=zeros((5,5),dtype=bool)
"""Mask out row 3"""
m[3,:]=True
arr=ma.masked_array(data,mask=m,fill_value=nan)
print arr
print 'Fill value:', arr.fill_value
print arr.filled()
farr=arr.sum(axis=1)
print farr
print 'Fill value:', farr.fill_value
print farr.filled()
"""I was expecting this"""
print nansum(arr.filled(),axis=1)
打印输出:
[[1.0 1.0 1.0 1.0 1.0]
[1.0 1.0 1.0 1.0 1.0]
[1.0 1.0 1.0 1.0 1.0]
[-- -- -- -- --]
[1.0 1.0 1.0 1.0 1.0]]
Fill value: nan
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ nan nan nan nan nan]
[ 1. 1. 1. 1. 1.]]
[5.0 5.0 5.0 -- 5.0]
Fill value: 1e+20
[ 5.00000000e+00 5.00000000e+00 5.00000000e+00 1.00000000e+20
5.00000000e+00]
[ 5. 5. 5. nan 5.]
最佳答案
arr.sum
返回的数组是一个新数组,它不继承 arr
的 fill_value(尽管我同意这可能是对 的一个很好的改进np.ma
).作为解决方法,您可以使用
In [18]: farr.filled(arr.fill_value)
Out[18]: array([ 5., 5., 5., nan, 5.])
关于python - 为什么 numpy masked_array 上的 sum() 操作会将填充值更改为 1e20?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18879272/