【发布时间】:2018-02-26 10:40:28
【问题描述】:
我有两个一维矩阵 A 和 B,在一些随机位置包含 NaN 值。我想明智地添加这些矩阵元素(C[i] = A[i] + B[i]) 并取元素总和的平均值。这在下面的代码中运行良好且高效:
import numpy as np
# Create some fake matrices
A = np.arange(0,10,0.5)
B = 10.0*np.arange(0,10,0.5)
# Replace some random elements in A and B with NaN
A[15] = np.nan
A[16] = np.nan
A[17] = np.nan
A[18] = np.nan
B[1] = np.nan
B[2] = np.nan
B[17] = np.nan
B[18] = np.nan
# Sum over A and B, element wise, and take the mean of the sums
C = 0.5 * ( np.where(np.isnan(A), B, A + np.nan_to_num(B)) )
但是,如果 A[i] 和 B[i] 之一包含 NaN 而另一个不包含,我不想取总和的平均值,而是将矩阵的值保留为不是NaN 的值。这个我一直没能解决。
换句话说(给定 A 和 B)我最终希望 C 成为:
A
array([ 0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5,
5., 5.5, 6., 6.5, 7., nan, nan, nan, nan, 9.5])
B
array([ 0., nan, nan, 15., 20., 25., 30., 35., 40., 45.,
50., 55., 60., 65., 70., 75., 80., nan, nan, 95.])
# What I eventually want C to be:
C
array([ 0., 0.5, 1. , 8.25, 11., 13.75, 16.5, 19.25, 22., 24.75,
27.5, 30.25, 33., 35.75, 38.5, 75., 80., nan, nan, 52.25])
有没有人有任何(有效的)建议我可以如何做到这一点? (例如,我想尽可能避免耗时的循环)。
【问题讨论】:
标签: python-2.7 numpy