Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中,与矩阵索引的向量混淆_Matlab - Fatal编程技术网

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

在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] 有人能解释一下这里发生了什么吗?为什么向量可以被矩阵索引,如何解释结果?注意a(b)的返回值与b的大小相同 a(b)只需将b的每个元素称为b(i,j),作为索引,并将输出作为与b大小相同的矩阵返回a(b(i,j))。您应该使用其他示例来获得更直观的感觉: b = [4 4 4; 4 4 4]; a

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

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

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

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

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

这是一个非常标准的MATLAB操作。当您有一个向量或矩阵时,可以提供另一个向量或矩阵以访问特定值。在MATLAB中访问值不仅限于单个索引(即
A(1)、A(2)
等)

例如,这里有一个向量
a=[1234]
。当您尝试使用
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的列主索引将给您一个越界错误。

如果
x=a(b)
,那么
x(i,j)
等于
a(b(i,j))
。回答得好。我喜欢把
A
的扩展解释为矩阵+1谢谢!很高兴在这里认识GTA的人。希望理工大学很棒。你在哪里读的本科?我将开始我的四年级论文,题目是机器人激光雷达导航。你正在研究的Bubl摄像机看起来可能有一些很酷的机器人应用程序我在Ryerson的三个学位都是这么做的。电气和组件。哦,当然!如果你看看我们的网站,我们把Bublcam放在一架无人机上,拍摄了这个城市的360度全景视频。祝你论文顺利,马特!激光雷达导航太棒了。许多良好的固体应用。