Home » Python » NumPyの使い方 » NumPyでn番目に大きい値をより速く取得する-partition関数

NumPyでn番目に大きい値をより速く取得する-partition関数

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

NumPyでn番目に大きい値を取得する基本的なコードをご紹介しました。

大量のデータから探す場合、時間計算量も考慮する必要があるでしょう。

[スポンサードリンク]

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

以下のようなコードで、2番目に大きい数値を、より速く取得できます。

import numpy as np
nums = np.array([
    [99, 66, 33],
    [88, 55, 22],
    [77, 44, 11],
])
np.partition(nums.ravel(), -2)[-2]

このようなコードであれば、最悪時間計算量でもO(n)のオーダーで済みます。

サンプルで行っている処理について

ポイントは、numpyのpartition関数です。
  np.partition(nums.ravel(), -2)[-2]

partition関数は、第2引数で指定されたインデックス位置よりも前にそれよりも小さいデータのみを、後ろに大きいデータのみを配置してくれます。

例えば、
  nums = np.array([10000, 1000, 100, 10, 1])
だった場合に、
  np.partition(nums, 3)
は、
  array([ 10, 1, 100, 1000, 10000])
を返します。
第2引数に指定されたインデックス「3」に該当する「1000」の前には、より小さい「10」「1」「100」が、後ろには「10000」が配置されています。

このnumpy.partition関数の引数に「-2」を指定して、
  np.partition(nums.ravel(), -2)[-2]
そのndarrayの「-2」の位置にあるデータを取得することで、
  np.partition(nums.ravel(), -2)[-2]
2番目に大きいデータを取得しています。

最終更新日時:2020-11-07 13:02

[スポンサードリンク]

Home » Python » NumPyの使い方 » NumPyでn番目に大きい値をより速く取得する-partition関数

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

.