web-dev-qa-db-ja.com

配列の値を置き換える

配列を使用した操作内の別の値の置換値として、または配列内を検索して値を別の値に置き換える方法

例えば:

array ([[NaN, 1., 1., 1., 1., 1., 1.]
       [1., NaN, 1., 1., 1., 1., 1.]
       [1., 1., NaN, 1., 1., 1., 1.]
       [1., 1., 1., NaN, 1., 1., 1.]
       [1., 1., 1., 1., NaN, 1., 1.]
       [1., 1., 1., 1., 1., NaN, 1.]
       [1., 1., 1., 1., 1., 1., NaN]])

ここで、NaNを0に置き換えることができます。応答をありがとう

15
ricardo

あなたはこれを行うことができます:

_import numpy as np
x=np.array([[np.NaN, 1., 1., 1., 1., 1., 1.],[1., np.NaN, 1., 1., 1., 1., 1.],[1., 1., np.NaN, 1., 1., 1., 1.], [1., 1., 1., np.NaN, 1., 1., 1.], [1., 1., 1., 1., np.NaN, 1., 1.],[1., 1., 1., 1., 1., np.NaN, 1.], [1., 1., 1., 1., 1., 1., np.NaN]])
x[np.isnan(x)]=0
_

np.isnan(x)は、Truexである場合は常にNaNであるブール配列を返します。 _x[ boolean_array ] = 0_は ファンシーインデックス を使用して、ブール配列がTrueの場合は常に値0を割り当てます。

ファンシーインデックス作成などの優れた概要については、 numpybook も参照してください。

31
unutbu

最近は特別な機能があります:

a = numpy.nan_to_num(a)
14
clh

質問の配列の例は次のとおりです。

import numpy as np
a = np.where(np.eye(7), np.nan, 1)

numpy.where および numpy.isnan 関数を使用して、新しい配列bを作成できます。

b = np.where(np.isnan(a), 0, a)

または、インプレース関数を使用して、a配列を直接変更します。

np.place(a, np.isnan(a), 0)  # returns None
0
Mike T