4

我有一个 1200*1200 的数组。它的一些值为零。我想将零值转换为 numpy.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 我不明白这个错误。任何替代方案或解决方案?

4

1 回答 1

8

该错误消息是因为您的数组用于存储整数:

>>> 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.])

如果要将数组转换为浮点数组,可以使用astype

>>> a = a.astype(float)
>>> a
array([ 0.,  1.,  2.])
>>> a.dtype
dtype('float64')
于 2012-11-09T01:30:08.310 回答