在Matlab中与矩阵索引的向量混淆

时间:2014-04-10 19:46:23

标签: matlab

以下代码在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]

有谁能解释这里发生的事情?为什么矢量可以用矩阵索引,如何解释结果?

2 个答案:

答案 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