2017-01-05 17 views
0

私は、ループのために3 の下で起こっているすべての計算を追跡しようとしています。データが大きすぎるため、データの追跡を維持することは困難です。したがって、私はループのためにすべての内で行われる反復の回数を記録するテーブルを構築したいと思います。forループの反復回数をMatlabテーブルに記録します

コード:だから

for i = 1:4 
    % Calculations 
    i 
    for j = 1:3 
     % Calculations 
     j 
     for k = 1:3 
      % Calculations 
      k 
     end 
    end 
end 

、私は期待してい表形式の出力は次のようである、

enter image description here

誰がこのタスクを達成するために私を助けてください。

答えて

0

最初に各ループのディメンションを宣言し、trackマトリックスを割り当てる次のコードを試すことができます。

ni=3 
nj=4 
nk=5 

track = zeros(3,ni*nj*nk); 

offset = 1 
for i = 1:ni 
    % Calculations 
    i 
    for j = 1:nj 
     % Calculations 
     j 
     for k = 1:nk 
      % Calculations 
      k 
      track(1,offset) = i; 
      track(2,offset) = j; 
      track(3,offset) = k; 
      offset = offset + 1; 
     end 
    end 
end 
+0

行列 'track'の見出しを書くにはどうすればよいですか?私は次のようなことを試みました: '[m、n] = size(track); for i = 1:n track {i} = ['K =' num2str(i)]; end for i = 1:m track {i} = ['n =' num2str(i)]; end' – user161816

+0

しかし、動作しません – user161816

2

あなたのij、およびk値のすべての順列を作成し、すべての順列をループ単一forループを持っているndgridを使用することができます。

[ii, jj, kk] = ndgrid(1:4, 1:3, 1:3); 

% Pre-allocate your results matrix 
results = zeros(size(ii)); 

for n = 1:numel(ii) 
    % Do calculation with ii(n), jj(n), kk(n) 
    results(n) = ii(n) + jj(n) + kk(n); 
end 

は今、あなたはあなたができるすべての変数にだけインデックス同様、iijj、またはkk値はresultsに特定のエントリのために何であったかを知りたい場合。あなたが本当に表形式の出力が必要な場合は、あなたがあなたのテーブルにiijj、およびkkを変換することができ

result_of_interest = results(100); 
i_of_interest = ii(100); 
j_of_interest = jj(100); 
k_of_interest = kk(100); 

data = cat(2, ii(:), jj(:), kk(:))'; 
関連する問題