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