簡體   English   中英

矩陣在MATLAB中用矩陣索引

[英]Matrix indexing with matrices in MATLAB

我試圖從一個基本上用作查找表的矩陣中提取值。 為此,我有一個行坐標矩陣和一個列坐標矩陣。 有沒有辦法可以按如下方式提取值:

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

當你執行這些命令時實際發生的是你獲得矩陣的每個排列。 所以在我的例子中,你得到一個由4×4組成的矩陣

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索引的一個微妙問題。
要解決此問題,您需要將row-col索引RC線性索引 一個簡單的方法是使用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 )

你可以使用arrayfun

>> arrayfun(@(x,y) A(x,y), R, C)
ans =
     1     5
     1     5

您得到的結果與RC大小相同,而不是矢量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM