我有两个numpy数组NS,EW来加总。他们每个人都有不同位置的缺失值,像在numpy数组求和中将nan视为零除了所有数组中的nan
NS = array([[ 1., 2., nan],
[ 4., 5., nan],
[ 6., nan, nan]])
EW = array([[ 1., 2., nan],
[ 4., nan, nan],
[ 6., nan, 9.]]
我如何能在numpy的方式进行求和操作,这将把南为零,如果一个数组楠在一个位置,并保持楠如果两个数组在同一位置有nan。
我希望看到的结果是
SUM = array([[ 2., 4., nan],
[ 8., 5., nan],
[ 12., nan, 9.]])
当我尝试
SUM=np.add(NS,EW)
它给了我
SUM=array([[ 2., 4., nan],
[ 8., nan, nan],
[ 12., nan, nan]])
当我尝试
SUM = np.nansum(np.dstack((NS,EW)),2)
它给了我
SUM=array([[ 2., 4., 0.],
[ 8., 5., 0.],
[ 12., 0., 9.]])
当然,我可以做元素级操作实现我的目标,
for i in range(np.size(NS,0)):
for j in range(np.size(NS,1)):
if np.isnan(NS[i,j]) and np.isnan(EW[i,j]):
SUM[i,j] = np.nan
elif np.isnan(NS[i,j]):
SUM[i,j] = EW[i,j]
elif np.isnan(EW[i,j]):
SUM[i,j] = NS[i,j]
else:
SUM[i,j] = NS[i,j]+EW[i,j]
但它是非常缓慢的。所以我正在寻找一种更加朴素的解决方案来解决这个问题。
感谢您的帮助!
它完美的工作,也比我使用的元素级操作快200倍。感谢您的帮助! – Superstar