首页 > 解决方案 > 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]])

标签: pythonnumpy

解决方案


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 代码为模型的更高级的东西。


推荐阅读