matlab多维索引的解释

时间:2017-10-11 03:22:17

标签: matlab

假设我创建了以下矩阵M。

>>>M = reshape(linspace(11,18,8),[2, 2, 2])
>>>M(:,:,1) =

   11    13
   12    14


   M(:,:,2) =

   15    17
   16    18

>>>M([1,2],[2, 1],[2,1])

>>>   
   ans(:,:,1) =

   17    15
   18    16


   ans(:,:,2) =

   13    11
   14    12

请解释命令M([1,2],[2,1],[2,1])如何产生上述结果。详细说明索引。

2 个答案:

答案 0 :(得分:0)

让我们从简单的例子开始,

M([1,2],1,1)将显示第1列和第2列矩阵1的第1行和第2行。

ans =

    11
    12

M([2,1],1,1)将交换第1列和第2列矩阵1的第1行和第2行。

ans =

    12
    11

因此,更改第一个索引会更改行顺序。同样,修改第二个索引将更改列顺序。并修改第三个索引将改变2d矩阵的顺序。 现在让我们举一些小例子来解决你的问题,

M([1,2],[2,1],1)

将交换第一个2d矩阵的两行的列。

ans =

    13    11
    14    12

并且M([1,2],[1,2],[2,1])将在第一个2d矩阵和第二个矩阵之间进行交换,

ans(:,:,1) =

    15    17
    16    18


ans(:,:,2) =

    11    13
    12    14

因此,结合最后两个示例将交换2d矩阵并交换列,保持行的顺序以及确切的答案显示

M([1,2],[2, 1],[2,1])

ans(:,:,1) =

    17    15
    18    16


ans(:,:,2) =

    13    11
    14    12

答案 1 :(得分:0)

希望这有帮助。

首先,M是一个三维矩阵,由两个2x2矩阵组成。因此M(:,:,1)将获得第一个2x2矩阵,而M(:,:,2)将获得第二个2x2矩阵。

一些例子:

M(1, 2, 2)会给出答案17,这是第二个矩阵的行1和列2中的元素。

M(1, 1, [2, 1])会按顺序给出答案:1511。它将以1顺序从两个矩阵中收集行1和列[2 1]中的元素(因此它将首先从第二个矩阵返回)。

M(1, 1, [1, 2])会按顺序给出答案:1115。它会以1顺序从两个矩阵中收集行1和列[1 2]中的元素(因此它将首先从第一个矩阵返回)。

M(1, [1 2], [2, 1])会按顺序给出答案:15 1711 13。它将收集列1&行12中的元素。 [2 1](按此顺序),每个来自M(2, [1 2], [2, 1])顺序的两个矩阵(因此它将首先从第二个矩阵返回)。

16 18会按顺序给出答案:12 142。它将收集列1&行2[2 1]中的元素。 M(2, [1 1], [2, 1])(按此顺序),每个来自16 16顺序的两个矩阵(因此它将首先从第二个矩阵返回)。

12 12会按顺序给出答案:21。它将收集列1&行[2 1]M([1 2], [2 1], [2, 1])中的元素。 17 15 18 16 (*同一列),每个来自[2 1]顺序的两个矩阵(因此它将首先从第二个矩阵返回)。

所以,

[1 2]会给出答案:

13 11
14 12

(表示输出是2x2矩阵,第1列和第2列是第2列的第2列和第1列(分别为Serializable)。第1行和第2行是第1列和第2列第二个矩阵的行(分别由ResultObject b = callBackend(a); ... ResultObject callBackend(SourceObject source) { ... } )。)

以及

@Recorded
ResultObject callBackend(SourceObject source) {
  ...
}

...

另外,您可能需要阅读文档: https://www.mathworks.com/help/matlab/math/matrix-indexing.html