为numpy数组中的nan值随机填充数字

3
我有一个numpy数组X,其中包含nan值。
X = np.array([[  1.,   2.,   3.],
              [  4.,  nan,  54.],
              [ 90.,  32.,  nan],
              [ 55.,  42.,  86.]])

我想用一个不同的随机数替换所有NaN值。 我可以使用np.random.randn()轻松生成随机数。 我可以使用掩码来定位和计算NaN值。

mx = ma.masked_array(X,mask=np.isnan(X)) //locate nans
mx.mask.sum()      // count nans so I know how many random values to generate

我的问题是我不知道如何快速高效地输入它们。我上面举的例子只是一个非常小的数据集,但我有一个要大得多的数据集。因此,效率至关重要。
如果我尝试:
X[mx.mask] = np.random.randn() //or 
X[mx.mask]=np.random.randn(mx.mask.sum())

我将每个nan替换为同一个随机数,这不是我想要的结果,或者在第二个示例中会出现广播错误。

有什么建议吗?


这个有帮助吗?https://dev59.com/bmsz5IYBdhLWcg3wuKW6 - grebneke
1个回答

6
X[np.isnan(X)] = np.random.randn(len(X[np.isnan(X)]))

以上对我非常完美。 Numpy版本1.8.0。


哇,我是个新手,一定是哪里打错了。等10分钟后再检查一下,谢谢! - Terence Chow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接