假设:
a =
1 2 3
4 5 6
2 3 4
和
b =
1 3 2
6 4 8
在MATLAB中a(b)
给出:
>> a(b)
ans =
1 2 4
3 2 6
此输出的原因是什么?
答案 0 :(得分:1)
当你有一个矩阵a:
a =
1 2 3
4 5 6
7 8 9
和b:
b =
1 3 4
3 2 6
然后a(b)是一种在a中处理项目并给你的方法:
>> a(b)
ans =
1 7 2
7 4 8
要理解这一点,你必须考虑一个单列向量
>> a(:)
ans =
1
4
7
2
5
8
3
6
9
现在b
(1 3 4)的第一行处理此向量中的元素,因此该单列向量的第一个,第三个和第四个元素为1
7
并且2
受到了批评。接下来,b
的第一行用作输出中的第二行的地址,因此第3,第2和第6个元素取自a
,这些是7 4和8。
答案 1 :(得分:0)
这只是一种matrix indexing。 'a'矩阵中的矩阵索引编号为:
1 4 7
2 5 8
3 6 9
答案 2 :(得分:0)
这可能与此帖子重复,我给出了答案:Got confused with a vector indexed by a matrix, in Matlab
但是,我想在此重复我的答案,因为我认为这是有益的。
这是您正在进行的非常标准的MATLAB操作。如果有矢量或矩阵,则可以提供另一个矢量或矩阵以访问特定值。在MATLAB中访问值不仅限于单个索引(即A(1), A(2)
等)。
例如,假设我们有一个向量a = [1 2 3 4]
。我们还说我们将b
作为矩阵,使其为b = [1 2 3; 1 2 3; 1 2 3]
。通过执行a(b)
来访问向量,您实际上在做的是查找。输出与b
的大小基本相同,您创建的矩阵有3行,每个元素访问第一,第二和第三个元素。您不仅可以为矢量执行此操作,还可以对矩阵执行此操作。
请记住,当您为矩阵执行此操作时,可以访问列主格式中的元素。例如,假设我们有这个矩阵:
A = [1 2
3 4
5 6
7 8]
A(1)
为1,A(2)
为3,A(3)
为5,依此类推。您将从第一列开始,增加索引将遍历第一列。一旦达到第5个索引,它就会跳到下一列。因此A(5)
为2,A(6)
为4,依此类推。
以下是一些可以帮助您进一步理解的示例。让我们定义一个矩阵A
,以便:
A = [5 1 3
7 8 0
4 6 2]
以下是一些MATLAB代码,可以加强您对此类索引的理解:
A = [5 1 3; 7 8 0; 4 6 2]; % 3 x 3 matrix
B = [1 2 3 4];
C = A(B); % C should give [5 7 4 1]
D = [5 6 7; 1 2 3; 4 5 6];
E = A(D); % E should give [8 6 3; 5 7 4; 1 8 6]
F = [9 8; 7 6; 1 2];
G = A(F); % G should give [2 0; 3 6; 5 7]
因此,以这种方式访问元素时的输出是指定为参数的向量或矩阵的大小。
为了完成,让我们为矢量执行此操作:
V = [-1 9 7 3 0 5]; % A 6 x 1 vector
B = [1 2 3 4];
C = V(B); % C should give [-1 9 7 3]
D = [1 3 5 2];
E = V(D); % E should give [-1 7 0 9]
F = [1 2; 4 5; 6 3];
G = V(F); % G should give [-1 9; 3 0; 5 7]
NB:您必须确保不提供会使访问超出范围的索引。例如,如果您尝试在示例中指定索引5,则会出现错误。此外,如果您在我的示例中尝试了大于9的任何内容,它也会给您一个错误。该3 x 3矩阵中有9个元素,因此指定大于9的任何列的主要索引都会给出一个越界错误。