Matlab转python的索引问题

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]]
posted @ 2024-04-26 10:40  FE-有限元鹰  阅读(16)  评论(0编辑  收藏  举报