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

配列をfloat配列に変換する場合は、次を使用できますastype

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