我有一些大的数据矩阵,以及一个包含x和y位置的两列矩阵,有一种更简单的方法来处理与这些点相对应的数据元素:
for adj = 1:size(loc,1)
testFunc(data1(loc(i,2),loc(i,1)), data2(loc(i,2),loc(i,1)), othervals)
end
大多数情况下,我正在寻找一种通过更接近 data1(loc(i))
的方式访问数据元素的方法答案 0 :(得分:4)
您想要的是通过线性索引访问data
的元素。线性索引首先沿第一维增加,然后沿第二维增加,依此类推。例如,3乘2阵列的元素将按以下顺序进行处理
1 3 5
2 4 6
因此,要通过线性索引获取2×3数组的元素(2,1)
,可以调用array(3)
。要在线性索引和下标之间进行转换(例如对2,3
),您可以分别使用ind2sub
和sub2ind
。
在您的情况下,您将运行
linIdx = sub2ind(size(data),loc(:,2),loc(:,1))
如果loc
的第一列索引为data
列,而loc
的第二列索引为行。
然后你可以遍历linIdx
来改变循环中的函数调用
testFunc(data1(linIdx(i)), data2(linIdx(i)), othervals)
答案 1 :(得分:1)
您可以将x-y位置转换为索引,并使用索引来处理矩阵。 然后你可以使用arrayfun来将你的函数发送到所有元素。
ind=sub2ind(size(data1),location(:,1),location(:,2));
output=arrayfun(@(x,y) testFunc(x,y,othervals),data1(ind),data2(ind));
或者如果testFunc没有输出标量:
output=arrayfun(@(x,y) testFunc(x,y,othervals),data1(ind),data2(ind),'UniformOutput',0);