備忘録とか日常とか

機械学習を勉強中。ベース日々練習中。

3次元配列の要素足しあわせとか numpy

忘れそうなのでメモ

3次元配列の足し合わせ

画像を局所領域ごとにA,B,Cの3クラス分類し、それぞれの確率をndarrayに格納する。(m,n,3)という形になる。
m * n個の各確率をそれぞれのクラスについて平均をとりたいとき、足し合わせる方法は以下のようにする。

# probに(m,n,3)のndarrayが入っているものとする
prob_sum = sum(sum(prob))

numpy.sum()でaxisを指定してやる必要があると思ったが、python標準のsum()でもできた。
あとはm * n で割ればよい。

prob_ave = prob_sum  /  (prob.shape[0] * prob.shape[1])

配列の最大値のindexを取得

[(Aの確率), (Bの確率), (Cの確率)]みたいなndarrayがあったときに、それらの最大値のindexを取得する。
ndarrayについてはpython標準のmax()は使えなかったので、numpy.max()を使う。

# probが各クラスの確率が入ったndarrayとする
index = numpy.where(prob==numpy.max(prob))
index = index[0]

numpy.whereで最大値のindexを取り出すわけだが、これの戻り値はndarrayで返される。
欲しいのはint型のindexの値なので、二行目でこれを取り出すわけである。
もっとうまいやり方があるような気もするけど・・・

(追記)
こうすれば一発で出来た。

index = np.argmax(prob)

axisを指定しない時は、flattenされた時のindexを返すっぽい。
axis=0とすれば行(縦)で見た時の最大値、axis=1なら列(横)で見た時の最大値のindexをndarrayで返す。

なかなかnumpyの使い方覚えられなくてげんなりする今日この頃