「numpy max 2番目」
「python ndarray max 2番目」
「python 2番目に大きい数字 numpy」
といった検索キーワードで、割とアクセスがあります。
numpy配列・ndarrayからn番目に大きい数値を取得するには、どのようなコードを書けばいいのか探していた方による検索です。
numpyを使うということは大量データを処理するのでしょうから、時間計算量を気にしなければいけないとは思うのですが、まずは基本的な考え方を理解しましょう。
numpyでn番目に大きい値を取得するサンプル
以下のコードを参考にしてください。
nums = np.array([
[99, 66, 33],
[88, 55, 22],
[77, 44, 11],
])
sorted(nums.ravel())[-2]
上記のコードを実行すると、numpy配列の中で2番目に大きい数値「88」が出力されます。基本的な考え方は、Pythonのリストからn番目に大きい数値を取得するのと同じです。
組み込み関数のsortedで昇順に並べ替えて、
sorted(nums.ravel())[-2]
インデックス指定で2番目に大きい数値を取得しています。
sorted(nums.ravel())[-2]
ただし、2次元以上のnumpy配列・ndarrayをいきなりsorted関数で並べ替えできません。そのため、ndarray.ravelメソッドで、1次元のndarrayにしてから、
sorted(nums.ravel())[-2]
並べ替えを行っています。
重複する要素がある場合
重複データがある場合も見ておきましょうか。
ndarrayが以下のような場合、
nums = np.array([
[99, 66, 33],
[99, 55, 22],
[77, 44, 11],
])
先の、
sorted(nums.ravel())[-2]
では「99」が返されます。
「77」を取得したいのであれば、
np.unique(nums)[-2]
です。
numpy.unique関数を使うと、並べ替え済みの、ユニークな要素のみからなるndarrayを取得できます。
最終更新日時:2020-11-07 13:03
Home » Python » NumPyの使い方 » NumPyでn番目に大きい値を取得する-ndarray.ravelメソッド・sorted関数