2017-04-07 6 views
0

何らかの理由で他の言語と同じように動作しないので、私はMatlabでループをよく理解しようとしています。Matlab for loopのトラブル

values = zeros(1,7); 
for i =[1, 4, 10, 15, 22, 24, 36] 
     variable = function(input, input, i); 
     values(i) = function(input, variable); 
end 

ので値が、私は結果を得ることはなく、任意の番号iが0に列セットを取得するために、なぜそれはまだ私は私のために選択しなかった値の列を追加しないところ1x36 2倍になります?

おかげ

答えて

1

あなたは7エントリでvaluesを事前に割り当てるされています。エントリ10に値を割り当てる場合は、エントリ89も作成する必要があります。Matlabでは、0が入力されます。

ここ例です:

>> clear 
>> values = ones(1,7) % preallocate with ones 
values = 
    1  1  1  1  1  1  1 
>> values(4) = 40 
values = 
    1  1  1 40  1  1  1 
>> values(10) = 100 % the array will have to grow 
values = 
    1  1  1 40  1  1  1 0  0 100 

注意もマイナスの影響を与える速度としてアレイ成長を有する、望ましくないこと。あらかじめわかっている場合はいつでも、最終的なサイズにはpreallocateをお勧めします。


あなたは結果が連続したエントリに格納する場合は、例えば、カウント変数を使用することを検討して編集用@Steveのおかげ

kのインデックス作成には、ループの各ステップが1ずつ増加します。

values = zeros(1,7); 
% k stores the number of steps of the loop 
k = 0; 
for i =[1, 4, 10, 15, 22, 24, 36] 
     % increment k 
     k = k+1; 
     variable = function(input, input, i); 
     values(k) = function(input, variable); 
end 
+0

ああ、ありがとう。しかし、どうすればこれを回避できますか?これらの列をすべて手動で削除すると非常に乱雑に見えます... – BlackDrMario

+1

@BlackDrMarioおそらく、各値をエントリ 'i'に保存するのではなく、エントリ 'k'に格納することをお勧めします。ここで、' k'はそれぞれ1つずつ増加するカウンタです反復 –