Matlab如何通过指定索引来提取更大矩阵的子集?

时间:2014-03-05 18:05:51

标签: matlab

我有一个矩阵A

A =

 1     2     3     4     5
 6     7     8     9    10
11    12    13    14    15
16    17    18    19    20

我有另一个矩阵来指定索引

index =

 1     2
 3     4

现在,我从A

获得了第三个矩阵C.
C = A(index)

C =

 1     6
11    16

问题:我无法理解为什么我收到了这样的矩阵C。我的意思是,背后的logi是什么?

1 个答案:

答案 0 :(得分:4)

它背后的逻辑是linear indexing:当你提供单个索引时,Matlab首先沿着列移动,然后沿着行移动,然后沿着更多维度移动(根据它们的顺序)。

所以在你的情况下(4 x 5矩阵),A的条目按以下顺序访问(这里的每个数字代表顺序,而不是条目的值):

 1     5     9    13    17
 2     6    10    14    18
 3     7    11    15    19
 4     8    12    16    20

一旦你习惯它,你会发现线性索引是一个非常强大的工具。

例如:要获得A中的最大值,您可以使用max(A(1:20))。这可以进一步简化为max(A(1:end))max(A(:))。请注意,“A(:)”是一种常见的Matlab习惯用法,用于将任何数组转换为列向量;有时称为线性化数组。

另请参阅ind2subsub2ind,它们用于将线性索引转换为标准索引,反之亦然。