【入門】インデックスサーチ【数値計算】

【入門】インデックスサーチ【数値計算】 数値計算
【入門】インデックスサーチ【数値計算】

MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

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

非極大値抑制をプログラムを作成しているときに出てきた、
線形インデックスサーチと論理インデックスサーチについて説明。

インデックスサーチとは?

非極大値抑制のプログラムを作成した時に
線形インデックスサーチと論理インデックスサーチを使用した。
それについて説明する。

インデックスサーチというのは、
端的に言うとベクトル、行列の特定の要素の抜き出しを行う機能。
配列で言うと、添え字指定のイメージになる。
ただし、一般的な配列の添え字と異なる点もある。

それは、「一気に複数の添え字を指定できる。」という点。

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

添え字指定がベクトルにできると、こういった抜き出しもできる。

ちなみに、今回は読み出しだけが、書き込みにも使える。
実際、非極大値抑制の時は行列への書き込みにインデックスサーチを使用した。

論理インデックスサーチ

次に論理インデックスサーチについて。
これは、0 or 1、またはfalse or trueのベクトル、行列をもって、該当のベクトル、行列への参照や書き込みを行う機能になる。

これも、実際に動きを見ればわかると思う

MATLABで論理インデックスサーチ

同じようにまずは11~19の9要素を3×3の行列を作成する。

>> 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

そして、論理インデックスを用意する。

>> B=11<A & A<16
B =
     0     1     0
     1     1     0
     1     0     0

論理インデックスを行列の添え字としてあてこむ。

>> A(B)
ans =
    12
    13
    14
    15

このように、該当する箇所の要素だけ抜き出される。

さらにtrue、false形式でも試してみる。

>> A([false true false;false true false; false true false])

ans =

    14
    15
    16

findによるインデックス取得

手法としては、線形インデックスサーチに関わる話になるが、
性格として論理インデックス的な手法もある。

MATLABの場合だとfindという関数を使うパターン。
今回の論理インデックスサーチに近い使い方ができる。

>> C=find(11<A & A<16)
ans =
     2
     3
     4
     5

>> A(C)
ans =
    12
    13
    14
    15

評価するパターンだから論理インデックスサーチっぽいが、
内部処理としては線形インデックスサーチになる。

まとめ

  • MATLABで線形インデックスサーチと論理インデックスサーチの挙動を確認。
  • 基本的な考え方は配列の添え字指定のベクトル化。
    • 線形の場合は、要素番号、論理の場合は、0or1のテーブル指定。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

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