python - nansum 仅当至少一个值不是 nan - numpy
问题描述
仅当行中的至少一个值不是 nan 时,我才想逐行执行 nansum 函数。因此,如果该行中的所有值都是 nan,则总和应该是 nan 而不是零。
a = np.array([[1],[2],[3],[4],[np.nan],[np.nan]])
b = np.array([[1],[2],[3],[4],[np.nan],[1]])
#a+b should be c
c = np.array([[2],[4],[6],[8],[np.nan],[1]])
解决方案
https://github.com/numpy/numpy/blob/maintenance/1.8.x/numpy/lib/nanfunctions.py上的 1.8 版本nansum
曾是
def nansum(a, axis=None, dtype=None, out=None, keepdims=0):
a, mask = _replace_nan(a, 0)
if mask is None:
return np.sum(a, axis=axis, dtype=dtype, out=out, keepdims=keepdims)
mask = np.all(mask, axis=axis, keepdims=keepdims)
tot = np.sum(a, axis=axis, dtype=dtype, out=out, keepdims=keepdims)
if np.any(mask):
tot = _copyto(tot, np.nan, mask)
warnings.warn("In Numpy 1.9 the sum along empty slices will be zero.",
FutureWarning)
return tot
当前版本只是替换和
return np.sum(a, axis=axis, dtype=dtype, out=out, keepdims=keepdims)
所以你可以做
a, mask = np.lib.nanfunctions._replace_nan(arr,0)
if np.all(mask):
val = np.nan
else:
val = np.nansum(arr)
或以省略的 1.8 代码为模型的更高级的东西。
推荐阅读
- powershell - Microsoft.XMLDOM.1.0 - “完成此操作所需的数据不可用”
- dart - 我正在使用旧代码,我想知道如何更新其中的 mixins
- html - 预加载时可见滚动条
- r - R闪亮对传单输入做出反应
- javascript - 有没有办法在下一个/上一个按钮上使用以下 Siema 排列?
- java - 无法使用自定义字体读取阿拉伯 PDF 文件
- go - 获取外部/父结构名称
- aframe - 位置和旋转属性未在 aframe 0.8.0 中使用 SetAttribute 更新
- css - 如何将我的布局链接到资源/视图/上的资产?
- user-interface - 如何在没有 FXML 的情况下更改按钮的背景颜色?#JAVAFX