以下代码在Matlab中运行:
a = [1 2 3 4]
b = [ 1 2 3; 1 2 3; 1 2 3]
a(b)
a(b)的结果是矩阵:
[ 1 2 3; 1 2 3; 1 2 3]
有谁能解释这里发生的事情?为什么矢量可以用矩阵索引,如何解释结果?
答案 0 :(得分:3)
这是您正在进行的非常标准的MATLAB操作。如果有矢量或矩阵,则可以提供另一个矢量或矩阵以访问特定值。在MATLAB中访问值不仅限于单个索引(即A(1), A(2)
等等)。
例如,你所拥有的是a = [1 2 3 4]
的向量。当您尝试使用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的任何列的主要索引都会给出一个越界错误。
答案 1 :(得分:2)
请注意,a(b)
的返回值与b
的大小相同。
a(b)
只需将b
的每个元素(称为b(i,j)
)作为索引,并将输出a(b(i,j))
作为与{{1}相同的矩阵返回}。您应该尝试其他示例以获得更直观的感觉:
b