2016-09-12 8 views
-4

私は-180から180までの値を持つ行列を持っていて、各値がある場所をすべて見つけて、それらを新しい行列に保存したいのですが、どうすればいいですか?Matlabマトリックスでいくつかの数字の場所を見つける方法はありますか?

値が-180:1:180になるforループを作成し、各値に対してすべてlocations(i,j)を探します。たとえば、値-180のすべての場所を探して、新しい行列に保存したいとします。それは可能ですか?ここではループ関数のコードを書いていますが、動作しますが、値を保存する方法がわからず、各値の場所がわかります。

for a= 180:-1:-180 

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

デモ入力データセットと期待される出力を投稿してください。 –

答えて

0

そう多くORIENTは行列であることを、あなたのようなIさんとJさん、保存するために細胞を使用することができthis.Assumingを行う方法:

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 

非常にエレガントなまたは効率的ではないが、それは動作します私のために良い。私は行列を使いたいと思っていますが、行列の各列の長さを自由に選ぶことはできません。 Otherwhiseあなたは

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

のように行くことができます。しかし仕事に、このための唯一の方法は、必ずサイズ(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 

の場合あなたは、スパースに精通している、それが遅くなりますaltougth、メモリのトンを保存するには

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)); 

を使用

+0

こんにちは、ありがとうございました! find_resultsはどのようにしてセルではなく行列に格納できますか? – abbxucy11

関連する問題