バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、Python(Numpy)、Scilabでスライシングを実施。
Pythonは言語仕様上の都合で表現が異なるが、ScilabはMATLABと同一になる。
そして、今回はJulia
登場人物
博識フクロウのフクさん
イラスト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
Juliaでスライシング
フクさん
おおよそMATLABと似たような感じで出来るっぽいので、
まず挙動を見てみよう。
# スライシング
> A=[1 2 3; 4 5 6; 7 8 9]
3×3 Matrix{Int64}:
1 2 3
4 5 6
7 8 9
> A[1,2]
2
> A[2,2]
5
> A[2,3]
6
> A[2,:]
3-element Vector{Int64}:
4
5
6
> A[2,2:3]
2-element Vector{Int64}:
5
6
> A[:,3]
3-element Vector{Int64}:
3
6
9
Juliaの挙動を見て
太郎くん
確かに書き方はMATLABにかなり似てるね。
太郎くん
違いは、
- 配列は”(“、”)”じゃなくて”[“、”]”で囲んでる点。
- A[2,:]、A[2,2:3]の挙動を見ると、切り出した部分がベクトルの場合、無条件で列ベクトルになる。
太郎くん
って感じか。
フクさん
そうだね。
MATLABは切り出す方向に合わせたベクトルになっていたが、
Juliaはベクトル≒列ベクトルが基本だからね。
ただ、ベクトルではなく、行列として抜き出した場合は、行と列の関係は維持されるな。
> A[1:2,:]
2×3 Matrix{Int64}:
1 2 3
4 5 6
太郎くん
ベクトルの時は要注意ってことか。
まとめ
フクさん
まとめだよ。
- Juliaでスライシングを実施。
- 基本的にはMATLABと似た感じ。
- ただし、配列添え字用のカッコが違う。
- あと、スライシングの結果、ベクトルとなった場合は列ベクトルになる。
- 行列としてスライシングした場合は、元の行と列の関係は維持される。
バックナンバーはこちら。
コメント