2013-01-24 65 views
1

我想访问matlab中数组的一些元素。考虑下面的场景:访问MATLAB中数组的元素

a = [1 2 3;4 5 6;7 8 9] 

b = [1 2;2 1] 

我想从a中访问索引为(1,2)和(2,1)的元素。我尝试使用(b)等,但没有我尝试过的方法工作。

如何在matlab中完成而不使用循环?

如果你能在matlab中为这些基础知识推荐一些好书,这将是有帮助的。

+0

的可能重复[如何选择一个子矩阵(没有任何特定的图案)在Matlab的](http://stackoverflow.com/q/13091193/1336150)。 –

回答

1

首先,使用sub2ind转换你的下标来索引:

dim1sub = b(:,1); 
dim2sub = b(:,2); 

ind = sub2ind(size(a), dim1sub, dim2sub) 

之后,你有索引

a(ind) 

会给你:

ans = 

    2 
    4 

有关更多信息,请参见here上矩阵索引。

+0

或只是'a(sub2ind(size(a),b(:, 1),b(:, 2)))'在一行中...... –

+1

@EitanT当然,但我通常不喜欢one-内线在回答问题时。它们使它看起来比它更复杂。 – HebeleHododo

0

通过使用Matlab,您可以访问具有扫描矩阵的所有列的线性索引的矩阵。所以在你的情况(与3x3)a(2,1)=a(2)a(1,2)=a(4)。 @HebeleHododo提供的答案将您的行和列索引并将它们转换为矩阵a的线性索引。请记住,如果您想索引不同大小的矩阵,则需要一个不同的线性索引。

此外,还有大量的在网上提供,以帮助学习MATLAB在http://www.mathworks.com/help/matlab/index.html#language-fundamentals,或者您可以键入doc help在命令窗口中的信息