非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python/NumPy】配列の最大値・最小値のインデックス(位置)を返すargmax, argmin関数

   

Pythonには配列の中の最大値の要素のインデックスを返す関数があります。NumPyのargmax関数, argmin関数です。これ、使うシーンはあまりないように思えますが実際はめちゃくちゃ便利で割とよく使います。他の言語だとForループで要素を1つ1つ取り出しながら評価していく必要がありますが、さすがPython(というかNumPy)と言ったところです。

基本形

基本形は以下の通りです。配列aの中の最大値と最小値のインデックス番号を返します。例えば最大値は9ですが3番目(index=2)なので2を返すわけです。

import numpy as np
a=[7, 8, 9, 3, 2, 1, 4, 5, 6]

print(np.argmax(a))
print(np.argmin(a))
# 出力
# 2
# 5
 

 

2次元配列の場合

2次元配列の場合は縦横の位置関係なく頭から数えたインデックスを返します。

import numpy as np
a = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]

print(np.argmax(a))
print(np.argmin(a))
# 出力
# 19
# 0
 

 

2次元配列の縦列で評価

もし縦方向のインデックスを知りたい場合は、前回紹介したように縦列を1次元配列化することで可能になります。配列変数では不可なので一旦numpyの変数にした上でn[:, 1]とすれば2列目を1次元配列化することができるので、その上で最大値・最小値のインデックスを取得します。

import numpy as np
a = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]

n = np.array(a)
print(np.argmax(n[:,1]))
print(np.argmin(n[:,1]))
# 出力
# 4
# 0
 

 

スポンサーリンク

 - Python