バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回から、基本的な使い方の続きとしてスライシングについての話がスタート。
まずは手馴れたMATLABの場合を説明。
今回はPython(Numpy)とScilabについて。
登場人物
博識フクロウのフクさん

イラスト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
Python(Numpy)でスライシング

Python(Numpy)のスライシングもさっとやってしまおう。

こんな感じになる。
#スライシング
>>> A=np.array([[1,2,3], [4,5,6],[7,8,9]])
>>> A
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> A[0,1]
2
>>> A[1,1]
5
>>> A[1,2]
6
>>> A[1,:]
array([4, 5, 6])
>>> A[1,1:3]
array([5, 6])
>>> A[:,2]
array([3, 6, 9])
>>>

基本的にはMATLABと似てはいるのだけど、
実際に設定している値は0オリジンの影響でちょっとかわっちゃうんだよね。

それに加えて指定した終端は範囲に含まれない。

A[1,1:3]
の挙動を見ると、そこら辺が分かるね。

ロジックをMATLABから移植、またはMATLABへ移植する際は気を付ける必要のある仕様だな。
Scilabでスライシング

ぶっちゃけMATLABと全く一緒だ。
//スライシング
-->A=[1 2 3; 4 5 6; 7 8 9]
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
--> A(1,2)
ans =
2.
-->A(2,2)
ans =
5.
-->A(2,3)
ans =
6.
-->A(2,:)
ans =
4. 5. 6.
-->A(2,2:3)
ans =
5. 6.
-->A(:,3)
ans =
3.
6.
9.
-->

確かに完全に一緒だ!

というか全部MATLABベースにしてくれると助かるんだけどなー。

まぁそれは我々の都合の話だからな。
Pythonから入った人からするとMATLABの1オリジンの方が変に見えちゃうだろうし。

最初にどの言語を触ったかでそこら辺の意見は分かれそうだね。
まとめ

まとめだよ。
- Python(Numpy)でスライシングを実施。
- 0オリジンのためMATLABと設定する数値が異なる。
- 加えて、区間演算子の終端は範囲に指定範囲には含まれない点に注意。
- Scilabでスライシング。
- MATLABと同一。
バックナンバーはこちら。
コメント