Matlab轉python的索引問題

FE-有限元鹰發表於2024-04-26

python 中numpy庫可以實現類似matlab多維陣列的運算.但兩者在索引方式上存在一些差異.這是需要注意的.例如:

% 定義一個4*4矩陣
A=1:16;
A=reshape(A,[4,4]);

% 提取2*2的子矩陣
a=A([1,4],[1,4])

% 得到一個2*2矩陣:
% [ A(1,1) A(1,4);
%   A(4,1) A(4,4) ]

但是python中則不能這樣得到子矩陣:

import numpy as np

A = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12],
              [13, 14, 15, 16]])

# 獲取與MATLAB相同的2x2矩陣
a = A[[0,3],[0,3]]

print(a)

# 輸出結果:[2,7]

在MATLAB中,使用A([0, 1], [1, 2])得到的是一個2x2矩陣,而在Python中使用NumPy進行類似的索引操作時,結果會有所不同.

在MATLAB中,這個索引操作實際上返回的是矩陣A中第1行和第2行的第2列和第3列元素組成的矩陣,即:

[ A(1,2) A(1,3);
  A(2,2) A(2,3) ]

這將得到一個2x2的矩陣.

在Python中使用NumPy庫,要得到與MATLAB相同的結果,您需要使用如下的索引方式:

import numpy as np

A = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12],
              [13, 14, 15, 16]])

# 獲取與MATLAB相同的2x2矩陣
a = A[np.ix_([0, 1], [1, 2])]

print(a)

這裡np.ix_函式用於建立一個索引陣列,它允許我們按照MATLAB的索引方式來選擇矩陣的子集.這段程式碼將得到與MATLAB相同的2x2矩陣結果:

[[ 2  3]
 [ 6  7]]

相關文章