2014-01-28 4 views
2

난 값이 nan 인 numpy 배열 X가 있습니다.나노 값에 대한 난수 배열 numpy 배열

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

나는 모든 유모가 다른 난수 값 대체하고 싶습니다. np.random.randn()으로 난수를 쉽게 생성 할 수 있습니다. 마스크를 사용하여 국가를 찾고 계산할 수 있습니다.

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

와우 나는 멍청하다. 어딘가에 오타가 있었을거야. 10 분이 지났을 때 체크 표시합니다! –