Nozdrum Nozdrum - 1 month ago 7
Python Question

Matlab output matrix to file with a reasonable format

I am writing the representation of an object to file. Its follows this simple format

<key>:<value>\n


Now I have multiple matrices to output, but the standard-way looks very ugly

f = open('somefile', 'w+t');
fprintf(f,'size:');
fprintf(f,'%+.4f\n', someObject.size);


But this will just result in an unreadble file like this

size: 5.1234
3.1234
2.5421
232332


And so on for hundreds of lines. If I do this in python/numpy
( f.write("size: " + str(someObject.size) + "\n")
I get something readable like

size:[[5.1234 3.1234 2.5421 232322]
[5.1234 3.1234 2.5421 232322]....


It preserves the shape and aligns it properly. How do I do this with matlab.

Answer

You need to split the fprintf command. Use an auxilary function:

function numpy_like_fprintf(fid, format_single_element, values)
fprintf(fid, '[');
fprintf(fid, [' ',format_single_element], values);
fprintf(fid, ' ]\n');

Now you can

numpy_like_fprintf(f, '%+.4f', someObject.size);

Alternatively, you can use num2str to convert the array to string, much like python's str().
Note that you can format the way numbers are converted to strings in num2str