2012-11-09 49 views
4

我有一個數組1200 * 1200。它的一些值是零。我想將零值轉換爲numpy.nan值。這是我的解決方案:
要將數組的零值轉換爲nan值

import numpy 
for i in range(1200): 
    for j in range(1200): 
     if data_a[i, j] == 0: 
      data_a[i, j] = numpy.nan 

但我得到這個錯誤:data_a[i,j] = numpy.nan ValueError: cannot convert float NaN to integer 我不理解的錯誤。任何替代或解決方案?

回答

6

該錯誤信息是因爲你的陣列是用於存儲整數:

>>> import numpy as np 
>>> a = np.arange(3) 
>>> a 
array([0, 1, 2]) 
>>> a.dtype 
dtype('int32') 
>>> a[0] = np.nan 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: cannot convert float NaN to integer 

如果陣列是浮動,不過,它會工作。你可以不用循環,太:

>>> a = np.arange(3.0) 
>>> a 
array([ 0., 1., 2.]) 
>>> a[a==0] 
array([ 0.]) 
>>> a[a==0] = np.nan 
>>> a 
array([ nan, 1., 2.]) 

如果你想你的數組轉換成int數組,你可以使用astype

>>> a = a.astype(float) 
>>> a 
array([ 0., 1., 2.]) 
>>> a.dtype 
dtype('float64')