フィルターのクリア

Convert a 3d matrix mat file to multiples 2d CSV files.

10 ビュー (過去 30 日間)
Mauro Larrat
Mauro Larrat 2017 年 3 月 3 日
編集済み: dpb 2017 年 3 月 5 日
Hello all.
I am an iniciant in MatLab. Could you teach me how to convert a 3d mat file table (m x n x p) to multiples p CSV files (each representing a 2d table m x n)?
I need to get p files each containing m x n values.
Thank you very much.
  1 件のコメント
dpb
dpb 2017 年 3 月 3 日
"I need to get p files each containing m x n values."
Why? The power in Matlab is using the vector notation so why not use the data as is in a much more compact and faster form than creating a bunch of separate text files?
What can you do with those that can't do from the .mat file?

サインインしてコメントする。

回答 (2 件)

dpb
dpb 2017 年 3 月 3 日
編集済み: dpb 2017 年 3 月 5 日
Against my better judgement, but Walter says I preach too much... :)
Presume array is x in memory--
for i=1:size(x,3)
fname=[fulfile('yourpath',['yourbasename' num2str(i,'%4d')] '.dat'] % build a file name
fid=fopen(fname,'w'); % open file handle with it
fwrite(x(:,:,i) % write as unformatted
fid=fclose(fid); % close this one...
end
If are still adamant about formatted, replace fopen|fwrite combination with
csvwrite(fname,x(:,:,i))
and watch the size go up and speed go down...

GEEVARGHESE TITUS
GEEVARGHESE TITUS 2017 年 3 月 3 日
If you want to just access the p, mxn structures you can apply the script like
b1=a(:,:,1);
...
bp=a(:,:,p);
There is no point in such assignments, as they just use up memory. Just say you have a matrix a of size 4x3x2 and you want to find the sum of each of the 4x3 structures, you can just apply the script
for i=1:size(a,3)
b(i)=sum(sum(a(:,:,i)));
end
  2 件のコメント
Mauro Larrat
Mauro Larrat 2017 年 3 月 3 日
編集済み: Mauro Larrat 2017 年 3 月 3 日
I would appreaciate hearing your thoughts on this, but I would like to save the p matrices (m x n) in separated files. It is 4096x5x1700 in a mat file. I want to get 1700 (or p) files of 4096x5.
Thanks,
dpb
dpb 2017 年 3 月 3 日
編集済み: dpb 2017 年 3 月 3 日
I again ask "Why!!!???" would you want to have to fool with 1700 files(!) instead of just dealing with the planes of the 3D array? After you do that, then you'll be back wanting to know how to process 1700 files in a loop, in all likelihood.
Now, granted, that's beginning to get to be a sizable array if you only need one slice to do something complex on but it's still "only"
>> 4096*5*1700*8/1024/1024
ans =
265.6250
>>
MB which with today's memory availability is pretty manageable.
Again, what's going to be done with the files once you've created them--you surely can't visually inspect each of them and the size will balloon by 10X or greater when you convert to text so if you're adamant going to split them out, at least keep them as .mat files or unformatted.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCell Arrays についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by