Loop to extract rows from matrix

3 Ansichten (letzte 30 Tage)
GiuBa
GiuBa am 29 Aug. 2017
Bearbeitet: Jan am 30 Aug. 2017
Hi, I need to extract each rows of a matrix creating different variables. How a can do it? Thanks in advance!

Akzeptierte Antwort

Jan
Jan am 29 Aug. 2017
The dynamic creation of a bunch of vectors causes troubles. It is even worse, if you want to use these vectors later on. To access a column of a matrix, simply use an index: A(:, i) is the i.th column. This is fast, clean and simple.
Please explain, why you assume that creating a set of variables is useful in your case. I'm sure, that the forum can give you better options to solve the actual problem.
  3 Kommentare
Adam
Adam am 30 Aug. 2017
Why can't you just create the text files from the one initial array, taking a row at a time?
Jan
Jan am 30 Aug. 2017
Bearbeitet: Jan am 30 Aug. 2017
Again: No, you do not need to create the vectors explicitly. Trying to do so is a shot in your knee. A(iRow, :) is perfect already.
Do you want to create 228 files? Then:
hdr = {'a ','b','c'}; % First header%
hdr2 = {'(m)','(%)','(%)'}; % Second Header%
fmt = repmat('%s\t ', 1, length(hdr));
fmt(end:end+1) = '\n';
for iRow = 1:size(A, 1);
fnam = sprintf('test%03d.txt', iRow);
fid = fopen(fnam, 'w');
fprintf(fid, fmt, hdr{:});
fprintf(fid, fmt, hdr2{:});
fclose(fid);
dlmwrite(fnam, A(iRow, :), '-append', 'delimiter', '\t');
end
This can be done directly also without dlmwrite:
fmtData = [repmat('%g\t', 1, size(A, 2) - 1), '%g\n'];
...
fprintf(fid, fmt, hdr2{:});
fprintf(fid, fmtData, A(iRow, :));
fclose(fid);
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Types finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by