MATLABとPythonのコード対応(行列編)
まえがき
MATLABでコードを書いたり読んだりするときに「Pythonでこう書いてたやつはMATLABではどう書くのだ?」といつもなるので、まとめてみました。
今回は行列関連。Python側はNumPy的な内容となります。
コメント
Python
# コメント
MATLAB
% コメント
行列のインデックス
Python
# コメント
MATLAB
% コメント
numpyではC配列などと同じくインデックスは0始まりとなるが、matlabは1始まりとなるので注意
- PythonはCと同じく0始まりで、終端のインデックスはN-1となる。
- MATLABは1始まりで、終端のインデックスはNとなる。
(N ... 要素数)
Python
x = np.array([1,2,3])
# x[0] ... 1
# x[1] ... 2
# x[2] ... 3
MATLAB
x = [1 2 3];
% x(1) ... 1
% x(2) ... 2
% x(3) ... 3
行列の作成
行列を生成する
Python
x = np.array([[1, 2, 3], [4, 5, 6]])
# array([[1, 2, 3],
# [4, 5, 6]])
MATLAB
x = [1 2 3; 4 5 6]
% x =
% 1 2 3
% 4 5 6
すべての要素が0の行列を作成
Python
x = np.zeros((3,4))
# array([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
MATLAB
x = zeros(3,4);
% x =
% 0 0 0 0
% 0 0 0 0
% 0 0 0 0
すべての要素が1の行列を作成
Python
np.ones((3,4))
# array([[1., 1., 1., 1.],
# [1., 1., 1., 1.],
# [1., 1., 1., 1.]])
MATLAB
x = ones(3,4)
% x =
% 1 1 1 1
% 1 1 1 1
% 1 1 1 1
等間隔で連続値のベクトルを作成
間隔を指定
Python
x = np.array([[1, 2, 3], [4, 5, 6]])
# array([[1, 2, 3],
# [4, 5, 6]])
MATLAB
x = [1 2 3; 4 5 6]
% x =
% 1 2 3
% 4 5 6
Python
x = np.zeros((3,4))
# array([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
MATLAB
x = zeros(3,4);
% x =
% 0 0 0 0
% 0 0 0 0
% 0 0 0 0
Python
np.ones((3,4))
# array([[1., 1., 1., 1.],
# [1., 1., 1., 1.],
# [1., 1., 1., 1.]])
MATLAB
x = ones(3,4)
% x =
% 1 1 1 1
% 1 1 1 1
% 1 1 1 1
間隔を指定
numpyでは終端の値が含まれないが、matlabでは終端の値が含まれる
という違いがあるので注意
Python
# 0〜1の間を0.1間隔で
# ※終端の1は含まれない
x = np.arange(0, 1, 0.1)
# array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
MATLAB
% 0〜1の間を0.1間隔で
% ※終端の1は含まれる
x = 0:0.1:1
% x =
% 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
間隔の指定を省略
間隔の指定を省略すると、python, matlab双方とも間隔1として動作する
Python
x = np.arange(0, 10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
MATLAB
x = 1:10
% x =
% 1 2 3 4 5 6 7 8 9 10
何等分するかを指定
Python
# 0〜1の間を11等分で
x = np.linspace(0, 1, 11)
# array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
↑ linspaceだとNumpyでも終端に指定した値が含まれる模様
MATLAB
% 0〜1の間を11等分で
x = linspace(0, 1, 11)
% x =
% 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
行列要素へのアクセス
2次元以上の行列へのアクセス
Python
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# >> x[1, 2]
# 7
MATLAB
x = [1 2 3 4; 5 6 7 8; 9 10 11 12];
% x(2, 3)
% ans =
% 7
範囲で指定
- pythonは終端の要素を含まないが、matlabは含む
Python
>> x = np.array([1, 2, 3, 4, 5])
>> x[2:4]
array([3, 4])
MATLAB
>> x = [1 2 3 4 5];
>> x(2:4)
ans =
2 3 4
最後の要素を指定
python:Python
- インデックスの-1 は、最後の要素を示す。
- 最後から2番目の要素は-2,、 最後から3番目の要素は-3 。。。(以下続く)
matlab:MATLAB
- 「end」は最後の要素のインデックスを示す。
- 最後から2番目の要素は「end-1」と記述すればよい。
Python
>> x = np.array([1, 2, 3, 4, 5])
>> x[-1]
5
>> x[-2]
4
MATLAB
>> x = [1 2 3 4 5];
>> x(end)
ans =
5
>> x(end-1)
ans =
4
おわりに
Python
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# >> x[1, 2]
# 7
MATLAB
x = [1 2 3 4; 5 6 7 8; 9 10 11 12];
% x(2, 3)
% ans =
% 7
Python
>> x = np.array([1, 2, 3, 4, 5])
>> x[2:4]
array([3, 4])
MATLAB
>> x = [1 2 3 4 5];
>> x(2:4)
ans =
2 3 4
Python
>> x = np.array([1, 2, 3, 4, 5])
>> x[-1]
5
>> x[-2]
4
MATLAB
>> x = [1 2 3 4 5];
>> x(end)
ans =
5
>> x(end-1)
ans =
4
随時更新していきます
Author And Source
この問題について(MATLABとPythonのコード対応(行列編)), 我々は、より多くの情報をここで見つけました https://qiita.com/kaeruair/items/44838b90d8f5160f1b85著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .