Arrays MATLAB中的矩阵索引
我试图从一个基本上用作查找表的矩阵中提取值。为此,我有一个行坐标矩阵和一个列坐标矩阵。是否有一种方法可以按如下方式提取值:Arrays MATLAB中的矩阵索引,arrays,matlab,matrix,indexing,Arrays,Matlab,Matrix,Indexing,我试图从一个基本上用作查找表的矩阵中提取值。为此,我有一个行坐标矩阵和一个列坐标矩阵。是否有一种方法可以按如下方式提取值: A(R, C) 或 例如: A = [ 1, 2, 3, 4; 5, 6, 7, 8; 9, 0, 1, 2; 3, 4, 5, 6 ]; R = [ 1, 2; 1 2]; C = [ 1, 1; 1 1]; 我想找到一些命令,以便 A(R, C) = 1, 5 1, 5 或 当你执行这些命令
A(R, C)
或
例如:
A = [ 1, 2, 3, 4;
5, 6, 7, 8;
9, 0, 1, 2;
3, 4, 5, 6 ];
R = [ 1, 2;
1 2];
C = [ 1, 1;
1 1];
我想找到一些命令,以便
A(R, C) =
1, 5
1, 5
或
当你执行这些命令时,你会得到矩阵的每一个排列。在我的例子中,得到一个4x4矩阵,由
A(1,1) A(1,1) A(1,1) A(1,1)
A(1,1) A(1,1) A(1,1) A(1,1)
A(2,1) A(2,1) A(2,1) A(2,1)
A(2,1) A(2,1) A(2,1) A(2,1)
有没有一种方法可以将每个索引矩阵/向量按对索引,这样结果就会显示出来
A(1,1) A(2,1)
A(1,1) A(2,1)
谢谢 事实上,您指出了Matlab索引的一个微妙问题。
要解决此问题,需要将行列索引
R
,C
转换为。一种简单的方法是使用:
下面是它的工作原理
>> A(sub2ind(size(A),R,C))
ans =
1 5
1 5
>> A(sub2ind(size(A),R(:),C(:)))
ans =
1
1
5
5
如果您在运行时很紧张,并且希望避免
sub2ind
的开销,您可以自己直接转换索引:
A( size(A,1)*(C-1)+R )
你可以用
结果的大小与
R
和C
相同,而不是矢量。太棒了!谢谢你的解释。这两种方法都很好。你能在你的回答中解释一下直接索引转换是如何工作的吗?这对我来说不是很直观。请看所有关于线性索引的内容@马尔马纳明白了。这是有道理的——它本质上是标准的矩阵版本(j-1)*d1+i
偏移。回答得好!使用sub2ind
和我建议的直接方法,您得到的结果与R
和C
-arrayfun
的结果完全相同,在这方面没有任何优势。@Shai,我的意思不是说比您的解决方案有优势,但我还是删除了advantage这个词。
A( sub2ind( size(A), R, C ) );
>> A(sub2ind(size(A),R,C))
ans =
1 5
1 5
>> A(sub2ind(size(A),R(:),C(:)))
ans =
1
1
5
5
A( size(A,1)*(C-1)+R )
>> arrayfun(@(x,y) A(x,y), R, C)
ans =
1 5
1 5