Numpy の ndarray 配列や Series で最大値、最小値の場所を知りたければ argmax、argmin メソッドを使います。ただし、最大、最小値がもし複数あった場合、argmax、argmin は先頭のインデックスを1つだけ返しておわりです。1つじゃなく、すべて知りたい場合は max、min と where を組み合わせます。
- 目次 -
スポンサーリンク
最大値のインデックス
1 2 3 4 5 6 7 8 9 10 11 |
import numpy as np data = np.array([1, 2, 3, 999, 1, 2, 999]) #-------------------------------------------- # array([ 1, 2, 3, 999, 1, 2, 999]) #-------------------------------------------- data.argmax() #---------- # 3 #---------- |
argmax が返してくるのは先頭のインデックスだけ。
すべて知りたければ
1 2 3 4 |
np.where(data == data.max()) #------------------------------- # (array([3, 6], dtype=int64),) #------------------------------- |
data == data.max() の結果を where に渡します。
where の役目
data == data.max() の部分は True、False の配列を戻します。
1 2 3 4 |
(data == data.max()) # array([False, False, False, True, False, False, True], dtype=bool) # ↑ ↑ # max() と等しければ True |
where は、配列を調べて値が True のインデックスを返します。
つまり、data.max() と値が等しい場所をまとめて知らせてくれるわけです。
最小値のインデックス
括弧のなかを min にするだけです。
1 2 3 4 |
np.where(data == data.min()) #------------------------------- # (array([0, 4], dtype=int64),) #------------------------------- |
Seriesの場合
Series も同様です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from pandas import Series ss = Series([1, 2, 3, 999, 1, 2, 999]) #---------- # 0 1 # 1 2 # 2 3 # 3 999 # 4 1 # 5 2 # 6 999 #---------- np.where(ss == ss.max()) #------------------------------- # (array([3, 6], dtype=int64),) #------------------------------- |