2017-09-06 196 views
2

我有一个大阵列的X和Y位置,我想用它们来定义那个位置的内容。我可以运行for循环来定义位置,但我认为会有更快的方法。我试图使用数组位置定义函数。Matlab矩阵索引2阵列(X,Y)

x = [6,2,3] 
y = [1,2,3] 

c = [1,1,1,2,2,3;... 
    1,1,1,2,2,5;... 
    2,2,1,4,2,3;... 
    1,1,4,3,2,3;... 
    1,2,3,4,5,3;... 
    1,2,3,5,4,2]; 

当我键入上述公式它导致了答案下面

c(y,x) 
ans = 
1  2  3 
1  1  1 
2  2  1 

什么我要找的是1:从阵列1的位置。

c(y(1),x(1)) 
c(y(2),x(2)) 
c(y(3),x(3)) 

有没有办法将数组限制为线性序列?我现在唯一的猜测是将阵列重塑成包含单个a和b的单元矩阵,然后执行cellfun。但我想我会让它变得复杂。

+0

使用'x'和'y'作为线性索引,按列的长度'c(size(c,1)*(x-1)+ y)' – Adiel

回答

3

您必须首先将位置转换为线性索引,然后才能获取所需线性序列中的正确元素。您可以使用sub2ind来帮助你做到这一点:

ind = sub2ind(size(c), y, x); % Get linear indices 
v = c(ind); % Get the elements 

这样做因而给出:

>> v = c(ind) 

v = 

    3  1  1 

您可以验证自己每对(y,x)给你你正在寻找正确的元素。例如,当y = 1x = 6时,检索的元素是3等等。

+1

@ Hojo.Timberwolf非常欢迎! – rayryeng

+1

@ Hojo.Timberwolf进一步阅读,这就是为什么你的结果是矩阵而不是线性序列的原因:https://stackoverflow.com/a/19731104/3250829。当您为矩阵的行和列指定数组时,它会查找相交的行和列并返回该矩阵的子集。查看帖子了解更多详情。有了这篇文章,这就是为什么你需要将每一对行和列坐标转换成一个单一的线性索引。这样,您就可以提取单个元素,而不是矩阵的子集。 – rayryeng