矩阵在MATLAB中用矩阵索引

时间:2015-04-30 15:14:30

标签: arrays matlab matrix indexing

我正在尝试从基本上用作查找表的矩阵中提取值。为此,我有一个行坐标矩阵和一个列坐标矩阵。有没有办法可以按如下方式提取值:

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)

谢谢!

2 个答案:

答案 0 :(得分:4)

实际上,您指的是Matlab索引的一个微妙问题 要解决此问题,您需要将row-col索引RC转换为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)

您可以使用arrayfun

R

您获得的结果与C和{{1}}相同,而不是矢量。