How to save an array output to file every 1000 iterations?
11 ビュー (過去 30 日間)
古いコメントを表示
My array is 201 by 201. And I want to watch it evolve by looking at every 1000 steps in time. Basically I have an initial array and then every time step it evolves based on an operator that I defined for it. I don't have enough memory in matlab to save every iteration of the array, so I've only got the last 5 saved at a time. What I want to do is when the time step reaches 1000,2000,3000, etc to save in a seperate file (possibly a .cvs file or a .txt file) the values of that array. That way I can look at how my function is evolving over long times. Does anyone know how to do this?
If you need to see my code I can add it, but it's rather long so I've ommitted it for now.
EDIT:
I've tried using
for n = 1:n_max
(lots of stuff defining f at each n value)
if ~(mod(n,1000))
export(mat2dataset(f(:,:,n)))
end
end
which seems to convert f to the appropriate type of dataset and then exports it to a text file which is great. The only problem with this is that I seem to be writing over the same document for each n that I get. Is there a way that I can give each new file a new name without having to write a new line in my script for each n?
0 件のコメント
回答 (4 件)
Wayne King
2014 年 7 月 21 日
編集済み: Wayne King
2014 年 7 月 21 日
You can certainly insert a write operation to catch every 1000 iterations by inserting an if statement on your counter.
Here is just a very simple example.
fid = fopen('test.txt','w');
for nn = 1:3000
x = nn;
if ~(mod(nn,1000))
fprintf(fid,'%4.2f\n',x);
end
end
Obviously this very simple example simply writes 1000.00, 2000.00, and 3000.00 to a text file because the value of the variable equals the value of the loop counter.
So basically you insert an if statement that catches when your counter hits 1000, 2000, etc.
You may actually want to just think about catching those matrices as elements of a cell array or something similar and handling the write operation (of just those matrices) after your simulation executes.
Chad Greene
2014 年 7 月 21 日
If you can keep your analysis in Matlab, saving to a .mat file tends to be a smoother process. The syntax is
save myfile
to save all the variable in your workspace or
save variable1 variable2 someothervariable
to save specific variables. If you prefer text files, dlmwrite can do it as well.
If you're looping some solution, say you're going through the loop 10,000 times, you can save every time n is divisible by 1000 with
for n = 1:10000
myVariable = 5 + n; % or whatever calculations you're doing
if mod(n,1000)==0
save(['solution_number',num2str(n),'.mat'],'myVariable');
end
end
3 件のコメント
Chad Greene
2014 年 7 月 21 日
When n=1000, the ['solution_number',num2str(n),'.mat'] saves a .mat file called solution_number1000.mat. When n=2000, the ['solution_number',num2str(n),'.mat'] saves a .mat file called solution_number2000.mat and so on.
Chad Greene
2014 年 7 月 21 日
編集済み: Chad Greene
2014 年 7 月 21 日
You could apply the same concept to Wayne's solution if you want to write multiple text files with different names. Instead of his
dlmwrite('testfile.txt',x,'-append');
You could use
dlmwrite(['solution_number',num2str(n),'.txt'],x)
Wayne King
2014 年 7 月 21 日
編集済み: Wayne King
2014 年 7 月 21 日
If its just a matrix, then you can use dlmwrite() with the '-append' option that will simply append the data. By default, dlmwrite() will comma separate the elements of the matrix, but you can control that by specifying a different delimiter.
for nn = 1:3000
x = randn(4,4);
if ~(mod(nn,1000))
dlmwrite('testfile.txt',x,'-append');
end
end
Note that fopen() also has a 'a+' option that appends.
Wayne King
2014 年 7 月 22 日
OK, so simply change the filename each time. In the following example I just create a file called Iteration1000.txt, Iteration2000.txt, etc and just write that 4x4 matrix.
for nn = 1:3000
x = randn(4,4);
if ~(mod(nn,1000))
filename = ['Iteration' num2str(nn) '.txt'];
dlmwrite(filename,x);
end
end
Thanks for accepting my answer if I have helped you.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Text Files についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!