Writing outputs from a 3D matrix loop
1 回表示 (過去 30 日間)
古いコメントを表示
I have a 3D matrix 35,43,144
I want to run the following code such that it performs the function element by element through the 3rd dimension (using 144 data points) I want this to be done for every pixel giving me 1505 outputs (35x43)
p = load ('JPLCSRmean.mat')
GRACE = p.datamean
ncol = size(GRACE,2);
for i = 1:144
for j = 1:43
for k = 1:35
[c,l] = wavedec(GRACE(i,j,k),4,'dmey');
al = appcoef(c,l,'dmey',1);
%[cD1,cD2,cD3,cD4,cD5,cD6] = detcoef(c,l,[1,2,3,4,5,6]);
D = [];
%D(:,6)= wrcoef('a',c,l,'dmey',6);
%D(:,5) = wrcoef('a',c,l,'dmey',5);
D(:,4) = wrcoef('a',c,l,'dmey',4);
D(:,3) = wrcoef('a',c,l,'dmey',3);
D(:,2) = wrcoef('a',c,l,'dmey',2);
D(:,1) = wrcoef('a',c,l,'dmey',1);
filename = sprintf('%s_%04f.txt', 'GRACE_APROXIMATIONS', k)
csvwrite(filename,D)
end
end
end
I think it is running allright but the outputs aren't saving properly, I think it is to do with where I have 'k' in this line
filename = sprintf('%s_%04f.txt', 'GRACE_APROXIMATIONS', k)
What can I replace 'k' with to give me 1505 outputs of 35x43? At the moment I am just getting 35 files that save over each other
I have tried adding another for loop with m = 1:1505 and replacing k with m but this has not helped.
1 件のコメント
回答 (1 件)
Federico Becattini
2015 年 11 月 5 日
you are giving a filename using only k to make different files. Of course this does not consider the value of i and j and hence you are creating 35 files that are overwritten 1505 times. To make more outputs you have to create files with names that take into account both i and j. Something like
filename = sprintf('%s_%d_%d.txt', 'GRACE_APROXIMATIONS', i, j)
or
filename = sprintf('%s_%d_%d_%d.txt', 'GRACE_APROXIMATIONS', i, j, k)
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!