Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB中的矩阵索引_Arrays_Matlab_Matrix_Indexing - Fatal编程技术网

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