【问题标题】:Got confused with a vector indexed by a matrix, in Matlab在 Matlab 中与由矩阵索引的向量混淆
【发布时间】:2014-04-11 07:36:44
【问题描述】:

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

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

【问题讨论】:

  • 如果x=a(b),那么x(i,j)等于a(b(i,j))

标签: matlab


【解决方案1】:

这是您正在执行的非常标准的 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 扩展为矩阵的解释,+1
  • 谢谢!很高兴在这里认识 GTA 的人。希望 U of T 很棒。
  • 你在哪里读本科?我正在开始我的第 4 年关于机器人激光雷达导航的论文。你正在研究的 Bubl cam 看起来可能有一些很酷的机器人应用程序
  • 在瑞尔森完成了我所有的三个学位。电。 &比较。英。哦,绝对!如果您查看我们的网站,我们将 Bublcam 放置在一架空中无人机上,并拍摄了城市的 360 度全景视频。 bublcam.com/portfolio/bubl-takes-flight。祝你的论文马特好运!激光雷达导航很棒。许多优秀的实体应用程序。
【解决方案2】:

注意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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2014-07-09
    • 1970-01-01
    • 2015-07-31
    • 2019-01-09
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多