2012-10-03 3 views
23

Numpy 정수 배열에 NaN을 저장하는 방법이 있습니까? 정수에서 그 어떤 표현이없는,Numpy integer nan

a=np.array([1],dtype=long) 
a[0]=np.nan 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: cannot convert float NaN to integer 
+0

@ tpg2114 예, 거기에 대한 대답이 numpy 또는 pandas 인 경우 나에게 명확하지 않습니다. – Yariv

답변

23

처럼 잘못된 값을 선택하지 : 내가 얻을 아니요, 적어도 현재 NumPy 버전에서는 사용할 수 없습니다. nan은 부동 배열 의 경우에만의 특수 값입니다.

비 플로트 배열이 실제적으로 nan에 해당하는 것을 저장할 수있는 특수 비트를 도입하는 데 대한 회담이 있지만 지금까지만 (2012/10) 회담입니다.

그동안 numpy.ma 패키지를 고려해 볼 수 있습니다. -99999와 같은 잘못된 정수를 선택하는 대신 numpy.ma.masked 값을 사용하여 잘못된 값을 나타낼 수 있습니다.

a = np.ma.array([1,2,3,4,5], dtype=int) 
a[1] = np.ma.masked 
masked_array(data = [1 -- 3 4 5], 
      mask = [False True False False False], 
     fill_value = 999999) 
+4

그러나 마스크 된 배열을 사용하려면 순수한 파이썬으로 구현되므로 성능 비용이 엄청납니다! – gaborous

4

NaN인지는 부동 소수점 유일한 것은, 그래서 더 :

는 -99999

+3

정규식 값을 유효하지 않은 것으로 선택하는 것은 좋은 속성이 아닙니다. 즉, nan과 동일한 속성을 복제하지 않기 때문입니다. 즉, 해당 값을 포함한 다른 값과의 비교는 false 여야합니다. – christang