1
1

More than 3 years have passed since last update.

np.whereでドツボにハマった話

Posted at

はじめに

画像処理の中でnp.whereのインデックス取り出しにおける出力が全くできなかったので
ここのサンプルコードを参考にしながら理解しました・・・
なので備忘録です!
これ読み方わかったらアハ体験できるのでは!??

np.whereの出力!!?

参考にしたサンプルコードと出力です.
今回は3階テンソル($Width \times Height \times Channels = 2 \times 3 \times 4 $)
となっています.

a_3d = np.arange(24).reshape(2, 3, 4)
print(a_3d)
# output
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
# 
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]

print(np.where(a_3d < 5))
# output
# (array([0, 0, 0, 0, 0]), array([0, 0, 0, 0, 1]), array([0, 1, 2, 3, 0]))

ここでnp.where(a_3d < 5)の出力を
$Width$:array([0, 0, 0, 0, 0])
$Height$:array([0, 0, 0, 0, 1])
$Channels$:array([0, 1, 2, 3, 0])
のリストだとみて
$Width$:W
$Height$:H
$Channels$:C
とおくと3階テンソルの要素にアクセスするためには

a_3d[W[0]][H[0]][C[0]] = 0 
a_3d[W[1]][H[1]][C[1]] = 1 
a_3d[W[2]][H[2]][C[2]] = 2 
a_3d[W[3]][H[3]][C[3]] = 3 
a_3d[W[4]][H[4]][C[4]] = 4 

となります.
これでやっとnp.where(a_3d < 5)の出力が読めた!

さいごに

最初は配列が返ってくるだけだったのでなんだこれ?っと思ってましたが
行,列,奥行きの形が見えてくると意味のある数値に変わりますね〜
アハ体験いいですよね〜

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1