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

  • 本文关键字:索引 向量 Matlab 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]

有人能解释一下这里发生了什么吗?为什么向量可以被矩阵索引,如何解释结果?

这是一个非常标准的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]

注意:您必须确保没有提供会使访问越界的索引。例如,如果您试图在示例中指定索引5,则会出现错误。此外,在我的例子中,如果你尝试了大于9的东西,它也会给你一个错误。3 x 3矩阵中有9个元素,因此指定大于9的列主索引将导致越界错误。

请注意,a(b)的返回值与b的大小相同。

a(b)只是将b的每个元素(称为b(i,j))作为索引,并将输出a(b(i,j))作为与b大小相同的矩阵返回。你应该参考其他例子来获得更直观的感觉:

b = [4 4 4; 4 4 4];
a(b) % Will return [4 4 4; 4 4 4]
c = [5; 5];
a(c) % Will error as 5 is out of a's index range

最新更新