バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/
はじめに
非極大値抑制をプログラムを作成しているときに出てきた、
線形インデックスサーチと論理インデックスサーチについて説明。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
インデックスサーチとは?
非極大値抑制のプログラムを作成した時に
線形インデックスサーチと論理インデックスサーチについて説明するようなこと言ってたけど、
早速やる感じ?
そうだね。
忘れないうちにやってしまおう。
そもそもとして、インデックスサーチというのがわからんのだけど・・・。
まぁ端的に言うとベクトル、行列の特定の要素の抜き出しだな。
配列で言うと、添え字指定みたいなやつ?
そうそう。
ただし、一般的な配列の添え字と異なる点もある。
そ、それは?
一気に複数の添え字を指定できる。
複数の添え字?
イメージ沸かんな・・・。
MATLABで線形インデックスサーチ
まぁ、実際に見せた方が良いだろう。
まず、11~19の9要素の値を並べて、行列に形状を変える。
>> A=[11:19]
A =
11 12 13 14 15 16 17 18 19
>> A=reshape(A,3,3)
A =
11 14 17
12 15 18
13 16 19
ここに対してインデックスサーチを掛けるってことか。
通常、以下の感じで各要素にアクセスができる。
>> A(1,1)
ans =
11
まぁ、普通の使い方だね。
これの添え字をベクトルにする。
は?
>> A([1,2],1)
ans =
11
12
あ、一行目と二行目の値も取れる感じか。
もうちょい複雑は線形インデックスサーチ
もっといろいろできる。
>> A([1,2],:)
ans =
11 14 17
12 15 18
>> A([1,3],[2,3])
ans =
14 17
16 19
なるほど。
添え字指定がベクトルにできると、こういった抜き出しもできるのか。
ちなみに、今回は読み出しだけだったけど、書き込みにも使える。
実際、前回の非極大値抑制の時は行列への書き込みにインデックスサーチを使用した。
まとめ
まとめだよ。
- MATLABで線形インデックスサーチを実施。
- 基本的な考え方は配列の添え字指定のベクトル化。
- 様々な指定方法で行列内部データの参照、書き込みが可能となる。
バックナンバーはこちら。
コメント