Matlab:矩阵索引逻辑

时间:2013-09-16 20:38:10

标签: arrays matlab matrix-indexing

我正在做非常简单的矩阵索引示例。代码如下所示

>> A=[ 1 2 3 4 ; 5 6 7 8 ; 9 10 11  12  ]

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12

>> A(end, end-2)   

ans =

    10

>> A(2:end, end:-2:1)

ans =

     8     6
    12    10

这里我有点困惑。当我使用A(end, end-2)时,它会在第一列之间取两个差异,当只剩下一列时没有进一步处理,但当我使用A(2:end, end:-2:1)时需要6 10,但是如何使用8 12打印{{1}},而只剩下一列,我们必须从右到左取两个差异,请有人解释这个简单点

2 个答案:

答案 0 :(得分:1)

选择A(end, end-2)读取:获取第4列中出现的A的最后一行中的元素(结束)-2 = 2

选择A(2:end, end:-2:1)类似地读取:获取第2行到第4行(结束)中的元素,并从最后一列开始以2的跳跃向后跳,即4然后2。

要检查索引编制,只需将end替换为size(A,1)size(A,2),如果分别位于行和列位置。

答案 1 :(得分:1)

首先是常规内容:end只是索引的占位符,即给定数组维度中的最后一个位置。例如,对于任意数组A(end,1)将选择第1列中的最后一个元素,A(1,end)将选择第一行中的最后一个元素。

在您的示例中,A(end, end-2)选取最后一行中最后一行前两列的元素。

解释诸如

之类的陈述
A(2:end, end:-2:1)

end替换为最后一行/列元素的实际索引可能会有所帮助,所以这相当于

A(2:3, 4:-2:1)

此外4:-2:1等同于列表4,2,因为我们指示列表从4开始,逐步减少2,最多(最小)1。所以这相当于< / p>

A([2 3],[4 2])

最后,A([2 3],[4 2])隐含了以下索引组合:

 A(2,4)   A(2,2)
 A(3,4)   A(3,2)