如何使用线性索引在Python中访问2D数组

4 python matlab matrix

我在MATLAB中有一段代码,我尝试将该代码转换为Python.在MATLAB中,我可以这样写:

x = [1,2,3;4,5,6;7,8,9];
Run Code Online (Sandbox Code Playgroud)

这只是一个3*3矩阵.然后,如果我使用x(1:5),MATLAB将首先将矩阵x转换为1*9向量,然后返回一个1*5向量,如下所示:ans=[1,4,7,2,5]; 那么请你告诉我python中的那段简单代码可以有相同的结果吗?

Sue*_*ver 10

您可以将矩阵转换为numpy数组,然后使用unravel_index将线性索引转换为下标,然后可以使用这些下标索引到原始矩阵中.请注意,下面的所有命令都使用'F'输入来使用列主要排序(MATLAB的默认排序)而不是行主要排序(默认为numpy)

import numpy as np

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
inds = np.arange(5);

result = a[np.unravel_index(inds, a.shape, 'F')]
#   array([1, 4, 7, 2, 5])
Run Code Online (Sandbox Code Playgroud)

另外,如果你想要像MATLAB一样压缩矩阵,你也可以这样做:

a.flatten('F')
#   array([1, 4, 7, 2, 5, 8, 3, 6, 9])
Run Code Online (Sandbox Code Playgroud)

如果要将一堆MATLAB代码转换为python,强烈建议使用numpy并查看有关显着差异的文档