假设我创建了以下矩阵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])如何产生上述结果。详细说明索引。
答案 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])
会按顺序给出答案:15
和11
。它将以1
顺序从两个矩阵中收集行1
和列[2 1]
中的元素(因此它将首先从第二个矩阵返回)。
M(1, 1, [1, 2])
会按顺序给出答案:11
和15
。它会以1
顺序从两个矩阵中收集行1
和列[1 2]
中的元素(因此它将首先从第一个矩阵返回)。
M(1, [1 2], [2, 1])
会按顺序给出答案:15 17
和11 13
。它将收集列1
&行1
行2
中的元素。 [2 1]
(按此顺序),每个来自M(2, [1 2], [2, 1])
顺序的两个矩阵(因此它将首先从第二个矩阵返回)。
16 18
会按顺序给出答案:12 14
和2
。它将收集列1
&行2
行[2 1]
中的元素。 M(2, [1 1], [2, 1])
(按此顺序),每个来自16 16
顺序的两个矩阵(因此它将首先从第二个矩阵返回)。
12 12
会按顺序给出答案:2
和1
。它将收集列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