繁体   English   中英

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

[英]how can I find the place of some numbers in a Matlab matrix?

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

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

for a= 180:-1:-180

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

有很多方法可以做到这一点。假设 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));

为了节省大量内存,它会变慢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM