バックナンバーはこちら。
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
X =
0.1000 0.2000 0.3000 0.4000 0.5000
>> 0.4<=X
ans =
0 0 0 1 1
>> X(0.4<=X)
ans =
0.4000 0.5000
>> X(0.4<=X)=0
X =
0.1000 0.2000 0.3000 0 0
Python(NumPy)
>>> X=np.array([0.1, 0.2, 0.3, 0.4, 0.5])
>>> X
array([0.1, 0.2, 0.3, 0.4, 0.5])
>>> 0.4<=X
array([False, False, False, True, True])
>>> X[0.4<=X]
array([0.4, 0.5])
>>> X[0.4<=X]=0
>>> X
array([0.1, 0.2, 0.3, 0. , 0. ])
Scilab
--> X=[0.1 0.2 0.3 0.4 0.5]
X =
0.1 0.2 0.3 0.4 0.5
--> 0.4<=X
ans =
F F F T T
--> X(0.4<=X)
ans =
0.4 0.5
--> X(0.4<=X)=0
X =
0.1 0.2 0.3 0. 0.
Julia
julia> X=[0.1 0.2 0.3 0.4 0.5]
1×5 Matrix{Float64}:
0.1 0.2 0.3 0.4 0.5
julia> 0.4.<=X
1×5 BitMatrix:
0 0 0 1 1
julia> X[0.4.<=X]
2-element Vector{Float64}:
0.4
0.5
julia> X[0.4.<=X].=0
2-element view(::Vector{Float64}, [4, 5]) with eltype Float64:
0.0
0.0
考察
太郎くん
これも似たり寄ったりって感じだねー。
Juliaの”.”演算子によるブロードキャスト指示がちょいちょい入るけど。
フクさん
まぁベクトル、行列を扱う際は似たようなことするからね。
どの環境でも、それを意識した実装になっているのだろう。
まとめ
フクさん
まとめだよ。
- 各ツール、各言語で論理インデックスサーチを実施。
- 基本的には似たり寄ったりの記述方法。
バックナンバーはこちら。
コメント