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の使い方覚えられなくてげんなりする今日この頃