Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】NumPyのnan_to_num()でNaNを0に、無限大を有限数に置き換える方法

PythonでNaN(非数)をゼロに、無限大を大きな有限数に置き換えたい場合は、NumPyの numpy.nan_to_num() メソッドを使用します。このメソッドは、非有限値(NaNや無限大)を置き換えた配列を返します。引数 copy を False に設定した場合、元の配列そのものが返されることもあります。

nan_to_num() の主なパラメータ

  • 第1引数(x):入力データとなる配列を指定します。
  • 第2引数(copy):Trueの場合はxのコピーを作成し、Falseの場合は元の配列を直接書き換えます(in-place操作)。ただし、in-place操作が行われるのは、配列へのキャストにコピーが不要な場合のみです。デフォルトは True です。
  • 第3引数(nan):NaNを埋めるために使用する値です。値を指定しない場合は、NaNが 0.0 に置き換えられます。
  • 第4引数(posinf):正の無限大を埋めるために使用する値です。指定しない場合は、非常に大きな有限数に置き換えられます。
  • 第5引数(neginf):負の無限大を埋めるために使用する値です。指定しない場合は、非常に小さい(負の)数に置き換えられます。

実装手順

1. 必要なライブラリをインポートする

まず、必要なライブラリをインポートします。

import numpy as np

2. array() メソッドでNumPy配列を作成する

無限大とNaNを含む複素数の配列を作成します。

arr = np.array([complex(np.inf, np.nan), np.nan])

3. 配列を表示する

print("Our Array...\n",arr)

4. 配列の次元数を確認する

print("\nDimensions of our Array...\n",arr.ndim)

5. データ型を確認する

print("\nDatatype of our Array object...\n",arr.dtype)

6. 配列の形状を確認する

print("\nShape of our Array object...\n",arr.shape)

7. nan_to_num() メソッドでNaNと無限大を置き換える

ここでは、NaNを 11111 に置き換えてみましょう。

print("\nResult...\n",np.nan_to_num(arr, nan = 11111))

完全なコード例

import numpy as np

# array() メソッドでNumPy配列を作成
arr = np.array([complex(np.inf, np.nan), np.nan])

# 配列を表示
print("Our Array...\n",arr)

# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)

# データ型を確認
print("\nDatatype of our Array object...\n",arr.dtype)

# 形状を確認
print("\nShape of our Array object...\n",arr.shape)

# nan_to_num() メソッドでNaNを11111に、正の無限大を最大の有限数に置き換える
print("\nResult...\n",np.nan_to_num(arr, nan = 11111))

実行結果

Our Array...
[inf+nanj nan +0.j]

Dimensions of our Array...
1

Datatype of our Array object...
complex128

Shape of our Array object...
(2,)

Result...
[1.79769313e+308+11111.j 1.11110000e+004 +0.j]

実行結果から、正の無限大(inf)が float64 の最大値である約 1.79769313e+308 に、NaNが指定した 11111 に置き換えられていることがわかります。このように nan_to_num() を使えば、機械学習や数値計算において問題となる非有限値を簡単に処理できます。

  1. Python(Matlplotlib)でXごとに複数のY値を持つ散布図を作成する方法

    PythonのMatplotlibを使って、各Xに対して複数のY値を持つ散布図を作成するには、NumPyでx・yのデータ点を生成し、zip()関数で両者をペアにして反復処理しながらプロットしていく方法が有効です。この記事では、その具体的な手順とサンプルコードを解説します。 作成手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 NumPyを使用して、ランダムな xs と ys のデータ点を作成します。 zip() で xs と ys をペアにまとめ、一緒に反復処理します。 それぞれの x と y の値を使って散布図を描画します。 show() メソッドを呼び

  2. MatplotlibでNaN値を含むデータをプロット・操作する方法を解説

    MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp