【发布时间】:2013-08-12 10:27:27
【问题描述】:
我有两个数组,我想取它们的每个单元格的平均值,但要考虑到 NaN。
我的两个数组是:
In [267]: a = np.array([ [1, 2, np.nan], [np.nan, 5, 6], [np.nan, np.nan, np.nan]])
In [268]: a
Out[268]:
array([[ 1., 2., nan],
[ nan, 5., 6.],
[ nan, nan, nan]])
In [269]: b = np.array( [ [2, np.nan, 6], [8, np.nan, 12], [14, 16, np.nan]])
In [270]: b
Out[270]:
array([[ 2., nan, 6.],
[ 8., nan, 12.],
[ 14., 16., nan]])
如果我不想考虑 NaN,那么我可以这样做:
In [271]: (a+b)/2
Out[271]:
array([[ 1.5, nan, nan],
[ nan, nan, 9. ],
[ nan, nan, nan]])
但是,我需要进行平均计算,以便 mean(2.5, nan) == 2.5 - 因此 NaN 被忽略,除非我有两个 NaN 在这种情况下 mean(nan, nan) == nan。
因此,我想得到的结果是:
Out[271]:
array([[ 1.5, 2, 6],
[ 8, 5, 9. ],
[ 14, 16, nan]])
scipy.stats.nanmean 似乎可以做到这一点。但是,要做到这一点,我认为我需要正确堆叠阵列。我有两个 3 x 3 阵列,我想我需要创建一个 2 x 3 x 3 阵列 - 对吗?我似乎无法将这些数组堆叠起来以创建具有这些维度的结果 - 我尝试了 np.dstack 以及各种其他技术,但似乎没有任何效果。
我怀疑我在做一些愚蠢的事情 - 关于如何解决这个问题的任何想法?
【问题讨论】: