LoginSignup
28
20

More than 5 years have passed since last update.

MATLABとPythonのコード対応(行列編)

Last updated at Posted at 2018-12-08

まえがき

MATLABでコードを書いたり読んだりするときに「Pythonでこう書いてたやつはMATLABではどう書くのだ?」といつもなるので、まとめてみました。

今回は行列関連。Python側はNumPy的な内容となります。

コメント

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

等間隔で連続値のベクトルを作成

間隔を指定

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

おわりに

随時更新していきます

28
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
20