J W*_*J W -1 python arrays math numpy nan
这是一个有趣的话题,因为它可能会导致代码中出现意外结果。假设我有一个如下数组;
import numpy as np
X = np.array([np.nan,np.nan,np.nan,np.nan,np.nan])
Run Code Online (Sandbox Code Playgroud)
np.nanmean(X)正确返回平均切片为空的警告并返回 nan。但是,在对数组求和时np.nansum(X),返回0.0。现在虽然数学上正确(无之和为 0),但预期返回的结果可能是 np.nan。
例如,我有一个函数,如果不存在冰数据文件,它将创建一个空的 nan 数组(180x360 点,每个点代表一个纬度/经度)。然后将此数组传递给一个函数,该函数对数组求和以找出数组中的冰总量。如果预期值为 9-1000 万平方公里,而 nansum 返回 0,这可能会产生误导。如果冰范围无论如何都在 0 左右,这将特别困难。在下图中,这显然是导致冰总和为 0.0 的缺失数据文件,但并非所有情况都如此清晰。
我在开发网站上看到了这个讨论,想知道为什么没有 kwarg 选项可以在np.nansum()需要时返回 np.nan,并且 B,如果整个矩阵充满了,是否有一个函数返回 True/False楠?
文档:
在 NumPy 版本 <= 1.8.0 中,对于全为 NaN 或空的切片,返回 Nan。在以后的版本中返回零。
解决方法:
def nansumwrapper(a, **kwargs):
if np.isnan(a).all():
return np.nan
else:
return np.nansum(a, **kwargs)
a = np.array([np.nan, np.nan])
b = np.array([np.nan, 1., 2.])
nansumwrapper(a)
# nan
nansumwrapper(b)
# 3.0
Run Code Online (Sandbox Code Playgroud)
您可以将 kwargs 传递给np.nansum():
c = np.arange(12, dtype=np.float_).reshape(4,3)
c[2:4, 1] = np.nan
nansumwrapper(c, axis=1)
# array([ 3., 12., 14., 20.])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5779 次 |
| 最近记录: |