Home » Python » NumPyの使い方 » NumPyでn番目に大きい値を取得する-ndarray.ravelメソッド・sorted関数

NumPyでn番目に大きい値を取得する-ndarray.ravelメソッド・sorted関数

動作検証バージョン:64bit Windows 10 Pro + Python 3.8.3 + NumPy 1.19.1

「numpy max 2番目」
「python ndarray max 2番目」
「python 2番目に大きい数字 numpy」
といった検索キーワードで、割とアクセスがあります。

numpy配列・ndarrayからn番目に大きい数値を取得するには、どのようなコードを書けばいいのか探していた方による検索です。

[スポンサードリンク]

numpyを使うということは大量データを処理するのでしょうから、時間計算量を気にしなければいけないとは思うのですが、まずは基本的な考え方を理解しましょう。

numpyでn番目に大きい値を取得するサンプル

以下のコードを参考にしてください。

import numpy as np
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関数

Copyright © インストラクターのネタ帳 All Rights Reserved.

.