2014-01-28 63 views
2

我有一個numpy數組X,其中有nan值。爲nan值numpy數組放置隨機數

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

我想替換所有楠與不同隨機值。我可以用np.random.randn()輕鬆生成隨機數字。我可以使用掩碼來定位和計數nans。

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()) 

我替換每個楠與是不是我想要的相同隨機數或我得到的第二個例子廣播錯誤。

有什麼建議嗎?

+0

這有幫助嗎? http://stackoverflow.com/questions/7701429/efficient-evaluation-of-a-function-at-every-cell-of-a-numpy-array – grebneke

回答

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

上面的作品完全適合我。 Numpy版本1.8.0。

+0

哇,我是一個noob我一定有一些錯別字。將在10分鐘過後謝謝你! –