在Matlab中,与矩阵索引的向量混淆
以下代码在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
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度全景视频。祝你论文顺利,马特!激光雷达导航太棒了。许多良好的固体应用。