2017-05-18 8 views
0

私はnとbの変数の出力をベクトルとして保存しようとしています。私が試した解決策は、ベクトルにゼロの不要な量を生成します。助言がありますか?ループ出力をベクトルとして格納していますか?

x=rand(113,1); 
y=rand(113,1); 
x=sort(x, 'descend'); 
v=[x,y]; 
for i=2:113 
    m=max(v(1:i-1,2)); 
    if v(i,2) > m == true 
    n=(v(i-1,2)) 
    b=(v(i-1,1)) 
    end 
end 

答えて

0
x=rand(113,1); 
y=rand(113,1); 
x=sort(x, 'descend'); 
v=[x,y]; 
n_vect = []; 
b_vect = []; 
for i=2:113 
    m=max(v(1:i-1,2)); 
     if v(i,2) > m == true 
      n=(v(i-1,2)) 
      b=(v(i-1,1)) 

      n_vect = [n_vect,n]; 
      b_vect = [b_vect,b]; 

     end 
end 
0
x=rand(113,1); 
y=rand(113,1); 
x=sort(x, 'descend'); 
v=[x,y]; 
n=[];b=[]; 
for i=2:113 
    m=max(v(1:i-1,2)); 
    if v(i,2) > m 
     n(end+1)=v(i-1,2) 
     b(end+1)=v(i-1,1) 
    end 
end 
0

まず第一に、あなたはifライン上trueは必要ありません。 if v>mと言うときはを意味するので、== trueは必要ありません。

次のようにあなたのコードを絞り込むことができます。

x=rand(113,1); 
y=rand(113,1); 
x=sort(x, 'descend'); 
v=[x,y]; 
N = []; 
B = []; 
for ii=2:113 
    if v(ii,2) > max(v(1:ii-1,2)) 
     N = [N v(ii-1,2)]; 
     B = [B v(ii-1,1)]; 
    end 
end 

をしかし、ベクトルが大きい場合は、二つのベクトルを事前に割り当てる検討すべきである覚えています。 ループの開始前に配列のサイズがわからない場合は、配列を事前に割り当ててから、必要に応じてループの完了後に配列を縮小します。あなたが事前に割り当て、その後、それらを取り除くNaNを使用することができ、その場合には

x=rand(113,1); 
y=rand(113,1); 
x=sort(x, 'descend'); 
v=[x,y]; 
N = nan(size(x)); 
B = N; 
for ii=2:113 
    if v(ii,2) > max(v(1:ii-1,2)) 
     N(ii,1) = v(ii-1,2); 
     B(ii,1) = v(ii-1,1); 
    end 
end 
N = N(~isnan(N)); 
B = B(~isnan(B)); 
0

注使用していること:

a = [] ; 
for i = 1:n 
    a = [a i] ; 
end 

を上記の方法は、あなたがにループ高の時間がかかります高い数字。また、MATLABは配列の下に赤い線を示し、を示しています。だから、最良の方法は行列をあらかじめ割り当てることです。さて、問題は、次元を知らないときにマトリックス/配列をどのように事前に割り当てることができるかです。私たちがMATLABにいることを思い出してください。それにはたくさんのオプションがあります。このケースでは、結果が配列なので、次元の1つが1になるので、この場合は結果が事前に割り当てられます。以下のコードを確認してください:

x=rand(113,1); 
y=rand(113,1); 
x=sort(x, 'descend'); 
v=[x,y]; 
count = 0 ; 
n_vect = zeros(1,[]); 
b_vect = zeros(1,[]); 
for i=2:113 
    m=max(v(1:i-1,2)); 
    if v(i,2) > m == true 
     n=(v(i-1,2)) ; 
     b=(v(i-1,1)) ; 
     count = count+1 ; 
     n_vect(count) = n ; 
     b_vect(count) = b; 

    end 
end 

ここで、事前に割り当てられているので、MATLABは警告を表示しません。

常に行を終了する方が良いことに注意してください。画面上の不必要なプリントを避けるために、煩雑で時間がかかる。

関連する問題