Matlab 通过“a”访问矩阵元素;“要点清单”;
我有一些大型的数据矩阵,以及一个包含x和y位置的两列矩阵,有没有更简单的方法来处理对应于这些点的数据元素Matlab 通过“a”访问矩阵元素;“要点清单”;,matlab,Matlab,我有一些大型的数据矩阵,以及一个包含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))的方式来访问数据元素的方法。您可以将x-y位置转换为索引,并使用索引来处理矩阵。 然后您可以使用arrayfun,将您的
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))的方式来访问数据元素的方法。您可以将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);
您需要的是通过其线性索引访问
数据的元素。线性指数首先沿第一维递增,然后沿第二维递增,依此类推。例如,3×2数组的元素将按以下顺序寻址
1 3 5
2 4 6
因此,要通过线性索引获得2×3数组的元素(2,1)
,可以调用数组(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)
testFunc只是一个占位符,我还有很多事情要做(数学和对矩阵元素的各种函数调用,其中一些使用x,y值进行计算),我真正需要的是一种通过ForEach样式循环中的某种“点”更简洁地访问矩阵元素的方法。我可以根据需要更改点列表的格式。具体来说,我可以根据在这些点上运行的其他操作的结果有条件地在这些点上运行操作。