从2个数组(X,Y)索引的Matlab矩阵

时间:2017-09-06 05:25:01

标签: arrays matlab indexing

我有一个大型数组的X和Y位置,我想用它们来定义该位置的内容。我可以运行for循环来定义位置,但我认为会有更快的方法。我试图使用数组位置定义函数。

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。但我认为我让它变得复杂。

1 个答案:

答案 0 :(得分: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,依此类推。