2

我有一些大型数据矩阵,以及一个包含 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))的方式访问数据元素的方法

4

2 回答 2

4

你想要的是data通过它们的线性索引访问元素。线性索引首先沿第一个维度递增,然后沿第二个维度递增,依此类推。例如,3×2 数组的元素将按以下顺序寻址

1 3 5
2 4 6

因此,要(2,1)通过线性索引获取 2×3 数组的元素,您可以调用array(3). 要在线性索引和下标之间进行转换(例如对2,3),您可以分别使用ind2subsub2ind

在你的情况下,你会跑

linIdx = sub2ind(size(data),loc(:,2),loc(:,1))

如果第一列loc索引为 的列data,第二列loc索引为行。

然后您可以循环linIdx将循环内的函数调用更改为

testFunc(data1(linIdx(i)), data2(linIdx(i)), othervals)
于 2012-09-30T13:02:32.433 回答
1

您可以将 xy 位置转换为索引,并使用索引来寻址矩阵。然后你可以使用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);
于 2012-09-30T04:27:21.787 回答