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

Python・NumPyでNaNを無視して配列の最大値を求める方法(np.nanmaxの使い方)

配列の最大値を求める際、データにNaN(非数)が含まれていると通常の np.max() では結果が NaN になってしまいます。そこで活躍するのが NumPy の numpy.nanmax() メソッドです。この関数は NaN を無視して配列の最大値を返します。

nanmax() は、指定した軸が取り除かれた状態で入力配列 a と同じ形状の配列を返します。入力が0次元配列の場合や axis に None が指定された場合は ndarray スカラーが返され、出力の dtype は入力と同じになります。

nanmax() の主なパラメータ

第1引数:a

最大値を求めたい要素を含む配列を指定します。配列以外のオブジェクトが渡された場合は、自動的に配列への変換が試みられます。

第2引数:axis

最大値を計算する軸(axis)を指定します。デフォルトでは配列全体を平坦化したうえで最大値が計算されます。特定の軸方向ごとの最大値が必要な場合に指定します。

第3引数:out

結果を格納する代替の出力配列です。デフォルトは None です。指定する場合は期待される出力と同じ形状である必要があり、必要に応じて型はキャストされます。

第4引数:keepdims

True を設定すると、縮小された軸がサイズ1の次元として結果に残ります。このオプションにより、元の配列 a に対して正しくブロードキャストできるようになります。デフォルト以外の値が指定された場合、keepdims は ndarray のサブクラスの max メソッドにも渡されます。サブクラス側が keepdims を実装していない場合、例外が発生します。

第5引数:minimum

出力要素の最小値です。空のスライスに対して計算を行えるようにするために存在します。

実装手順

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

import numpy as np

array() メソッドを使って NumPy 配列を作成します。ここでは int 型の要素に加えて、nan と NINF(負の無限大)も含めた要素を追加しています。

arr = np.array([[25, 50, 75], [90, np.nan, np.NINF]])

作成した配列を表示します。

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

配列の次元数を確認します。

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

配列のデータ型を確認します。

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

NaN を無視して配列の最大値を返すには、numpy.nanmax() メソッドを使用します。

print("\nResult (nanmax)...\n",np.nanmax(arr))

完全なコード例

import numpy as np

# array()メソッドでNumPy配列を作成
# nan と NINF(負の無限大)を含む要素を追加
arr = np.array([[25, 50, 75], [90, np.nan, np.NINF]])

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

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

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

# NaNを無視して最大値を取得するには numpy.nanmax() を使用
print("\nResult (nanmax)...\n",np.nanmax(arr))

実行結果

Our Array...
[[ 25. 50. 75.]
[ 90. nan -inf]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Result (nanmax)...
90.0

実行結果から、配列に NaN や負の無限大(-inf)が含まれていても、np.nanmax() を使えば正しく最大値の 90.0 が取得できていることがわかります。なお、通常の np.max() を使った場合、NaN が伝播して結果が nan になるため、欠損値を含むデータの集計には nanmax() が適しています。

  1. Python・PandasでIndexの最大値を取得する方法|index.max()の使い方

    PandasのIndexオブジェクトから最大値を取得したい場合は、index.max() メソッドを使用します。このメソッドは、インデックスに含まれる要素の中から最も大きい値を1つ返してくれます。必要なライブラリのインポートまず、Pandasをインポートします。import pandas as pdPandasインデックスの作成次に、数値を含むPandasのインデックスを作成します。index = pd.Index([10, 20, 70, 40, 90, 50, 25, 30])作成したインデックスを表示してみましょう。print(Pandas Index...\n, index)そして、m

  2. Pythonで配列内のnCr値が最大となるペアを検索する方法

    問題概要 n個の整数を含む配列arrが与えられたとき、配列からarr[i]とarr[j]を選び、二項係数arr[i]Carr[j](組み合わせの数)が最大になるようなペアを見つける必要があります。条件を満たすペアが複数存在する場合は、そのうちのどれか1つを返せば構いません。 例えば、入力が[4, 1, 2]の場合、出力は「4 2」になります。これは、4C1 = 4、4C2 = 6、2C1 = 2と計算でき、(4, 2)のペアが最大値6を与える唯一の組み合わせだからです。 解法の考え方 この問題を効率的に解くには、二項係数の重要な性質を利用します。nCrは、rがn/2に最も近いときに最大値を取る