如何在Matlab矩阵中找到某些数字的位置?

时间:2016-09-12 20:44:06

标签: matlab for-loop matrix

我有一个矩阵,其值从-180到180,我想找到每个值所在的所有位置,然后将它们保存在一个新的矩阵中,我该怎么办?

我想为值-180:1:180创建一个for循环,并为每个值找到所有locations(i,j)。例如,我想查找值-180的所有位置,然后将它们保存在新矩阵中。有可能吗?我在这里写了循环函数的代码,它可以工作,但我不知道如何保存值,以便知道每个值的位置。

for a= 180:-1:-180

   [i,j]=find(ORIENT==a)     
end

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。假设ORIENT是矩阵,你可以使用单元格存储i和j,如:

ORIENT=round(180.*(2.*rand(100,100)-1)); %or whatever
find_results=cell(361,2);
a=-180:1:180;
for index=1:length(a)
   [i,j]=find(ORIENT==a(index));
   find_results{index,1}=i;
   find_results{index,2}=j;     
end

不是很优雅或高效,但对我来说效果很好。我知道你想要使用矩阵,但是由于你无法自由选择矩阵中每列的长度,我认为这样做。其他你可以像

一样
find_results(index,1:length(i))=i;

但是你需要首先创建最终用零填充的矩阵,因为这样做的唯一方法是确保size(find_result,1)=矩阵中元素的数量(单元格不关心)。你可以使用一个稀疏的矩阵但是人,它已经失去控制。

--------------------------编辑-------------------- -------------------

我猜你可以为矩阵做这样的事情,但是尺寸会很大:

ORIENT=round(180.*(2.*rand(100,100)-1)); %or whatever
a=-180:1:180;
find_results_i=nan(size(ORIENT,1).*size(ORIENT,2),size(a,2));
find_results_j=nan(size(ORIENT,1).*size(ORIENT,2),size(a,2));
for index=1:length(a)
   [i,j]=find(ORIENT==a(index));
   find_results_i(1:length(j),index)=i;
   find_results_j(1:length(j),index)=j;     
end

如果您熟悉稀疏,请使用

find_results_i=sparse(size(ORIENT,1).*size(ORIENT,2),size(a,2));
find_results_j=sparse(size(ORIENT,1).*size(ORIENT,2),size(a,2));

为了节省大量内存,altougth会慢一些