MATLAB,Python,Scilab,Julia比較 第3章 その45【インデックスサーチ①】

MATLAB,Python,Scilab,Julia比較 第3章 その45【インデックスサーチ①】 数値計算
MATLAB,Python,Scilab,Julia比較 第3章 その45【インデックスサーチ①】

バックナンバーはこちら。
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で線形インデックスサーチを実施。
  • 基本的な考え方は配列の添え字指定のベクトル化。
  • 様々な指定方法で行列内部データの参照、書き込みが可能となる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました