我正在尝试从基本上用作查找表的矩阵中提取值。为此,我有一个行坐标矩阵和一个列坐标矩阵。有没有办法可以按如下方式提取值:
A(R, C)
或
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(:)) =
1
1
5
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)
谢谢!
答案 0 :(得分:4)
实际上,您指的是Matlab索引的一个微妙问题
要解决此问题,您需要将row-col索引R
,C
转换为linear indices。一种简单的方法是使用sub2ind
:
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
如果您在运行时很紧张并希望避免sub2ind
的开销,您可以直接转换索引:
A( size(A,1)*(C-1)+R )
答案 1 :(得分:1)