Adding a header to a matrix in Matlab

16,572

Solution 1

If you are feeling lazy and your matrix is not too big, you can make your data into a dataset, then export it. If your matrix is large, I recommend you look at the link Amro has given. Note dataset is a function in the Statistics Toolbox.

ds = dataset({rand(10,3) 'a' 'b' 'c'})
export(ds, 'file', 'foo.txt', 'delim', '\t');

Solution 2

First of all, this code (header = ['tau', 'TOL Adev', 'FOL Adev'];) will concatenate your strings, so use cells.

@Amro code is good, but if you want to make the output pretty (like in the example), you need to do yourself, like this function:

function writeWithHeader(fname,header,data)
% Write data with headers
%
% fname: filename
% header: cell of row titles
% data: matrix of data

f = fopen(fname,'w');

%Write the header:
fprintf(f,'%-10s\t',header{1:end-1});
fprintf(f,'%-10s\n',header{end});

%Write the data:
for m = 1:size(data,1)
    fprintf(f,'%-10.4f\t',data(m,1:end-1));
    fprintf(f,'%-10.4f\n',data(m,end));
end

fclose(f);

You just need to play with the fprintf format string...

Share:
16,572
Alex Nichols
Author by

Alex Nichols

Updated on June 04, 2022

Comments

  • Alex Nichols
    Alex Nichols almost 2 years

    I hope you guys are having a nice Tuesday so far. I realize that you cannot add a string header to a numerical matrix in MATLAB. I am trying to add headers to a matrix I currently have and output it to a tab-delimited text file. From my research, I know that the matrix has to be converted into a cell, but I am having trouble saving the cell using dlmwrite.

    Here is the matrix I currently have:

      0         0         0
    0.0454    0.0105    0.0105
    0.0907    0.0066    0.0068
    0.1814    0.0038    0.0049
    0.3629    0.0034    0.0040
    0.7258    0.0029    0.0023
    1.4515    0.0002    0.0007
    2.9030    0.0003    0.0005
    

    This is what I want:

     tau     TOL Adev  FOL Adev
    0.0454    0.0105    0.0105
    0.0907    0.0066    0.0068
    0.1814    0.0038    0.0049
    0.3629    0.0034    0.0040
    0.7258    0.0029    0.0023
    1.4515    0.0002    0.0007
    2.9030    0.0003    0.0005
    

    The matrix(3, 7 with zeros in the first row) is called saveData.

    I have tried assigning header = ['tau', 'TOL Adev', 'FOL Adev']; and output = {header;saveData}; but I cannot figure out how to use dlmwrite('filename', output, '\t').

    Thank you so much for the help! -Alex

  • Alex Nichols
    Alex Nichols over 12 years
    That worked perfectly. My matrix was very small(7,3) and I guess I was feeling lazy! :P Thanks, -Alex