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

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

バックナンバーはこちら。
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で線形インデックスサーチを説明してもらったけど、
論理インデックスサーチってのもできるんだよね?
これはどういったものになるの?

フクさん
フクさん

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
太郎くん
太郎くん

この指定のOKなのか。

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

フクさん
フクさん

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

太郎くん
太郎くん

なにそれ?

フクさん
フクさん

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

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

>> A(C)
ans =
    12
    13
    14
    15
太郎くん
太郎くん

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

フクさん
フクさん

これらは各環境、各言語で使用できるパターンだから、次回にでもまとめをやろう。

まとめ

フクさん
フクさん

まとめだよ。

  • MATLABで論理インデックスサーチの挙動を確認。
  • 評価式の結果が論理インデックスとなり、それを行列に渡すことで1、またはtrueの部分の要素の参照及び書き換えが可能。
  • find関数を使用すると評価式に該当する線形インデックスが取得できる。
  • これらはMATLAB以外の環境、言語でも使用できることが多い。

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

コメント

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