[英]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.