python - 为什么 numpy masked_array 上的 sum() 操作会将填充值更改为 1e20?

标签 python numpy

这是功能还是错误?有人可以向我解释 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/

相关文章:

python - 从网络摄像头流 openCV 中隔离并显示红色 channel

python - 安装包时缺少 pyconfig.h

python - 用另一个 numpy 数组的值逐行替换 numpy 数组

python - 元组作为多维数组的索引

python - 根据2个数据帧计算列值

python - 无法安装pymorph

python - Mac 操作系统升级后如何恢复 Python cron 作业?

python - Tensorflow 2.0 : Can I change the settings on a Tf. data.Dataset——特别是 `repeat()` 功能?

python - 为什么递增索引数组的行为如 numpy 用户文档中所述?

python - 如何使用 Python 访问属于对象的动态 C++ 数组变量?