簡體   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