为 nan 值放置随机数 numpy 数组

Ter*_*how 3 python arrays random numpy

我有一个 numpy 数组 X,nan其中包含值。

X = np.array([[  1.,   2.,   3.],
              [  4.,  nan,  54.],
              [ 90.,  32.,  nan],
              [ 55.,  42.,  86.]])
Run Code Online (Sandbox Code Playgroud)

我想用不同的随机数替换所有 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
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何快速有效地输入它们。我上面给出的例子是一个非常小的数据集,但我有一个大得多的数据集。因此效率是关键。

如果我尝试

X[mx.mask] = np.random.randn() //or 
X[mx.mask]=np.random.randn(mx.mask.sum())
Run Code Online (Sandbox Code Playgroud)

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

有什么建议么?

U2E*_*EF1 6

X[np.isnan(X)] = np.random.randn(len(X[np.isnan(X)]))
Run Code Online (Sandbox Code Playgroud)

以上对我来说非常有效。Numpy 版本 1.8.0。