我有2个矩阵,一个有浮点数,另一个有整数。两个矩阵都有相同的行数但列数不同。
我想将两个矩阵一起写入一个文件,每一行由并排打印的每个矩阵中的一行组成。
我该怎么做?
我的尝试(不成功):
0xe+foo
答案 0 :(得分:1)
您的问题是,%f
的{{1}}和%d
仅指第一个和第二个列。如果有更多列,Matlab将重复该模式。
因此,您要将fprintf
的第一列保存为FloatMat
,将float
的第二列保存为FloatMat
,等等......
您必须指定每列的类型,但不必担心,您不必手动执行,而是使用Integer
repmat
PD:请注意,我已经用空格分隔了列,就像你一样。如果需要,请随意使用fprintf(fid, [repmat('%f ',1,size(FloatMat,2)) ' ' ...
repmat('%d ',1,size(IntMat,2)) '\n'], ...
FloatMat(i,:), IntMat(i,:));
或逗号分隔它们。
PD:您也可以将\t
包含在同一行中,这样就可以保存一行代码。
答案 1 :(得分:0)
这个实际上以浮动格式写入,精确到8位数,你不会在这里得到%d
效果,但只有两行:
BothMat = [FloatMat IntMat]
save(nameF, 'BothMat', '-ascii')
答案 2 :(得分:0)
你不需要在他的情况下使用repmat
复杂化事物,只需fprintf
浮点矩阵,然后是int matirx:
nRows = 5;
Mint = magic(nRows);
Mfloat = rand(nRows, 3);
fid = fopen('test.txt','w');
for row = 1:nRows
fprintf(fid,'%f\t', Mfloat(row,:));
fprintf(fid,'%d\t',Mint(row,1:end-1)); % only go to end to prevent trailing delimiter after final value of the row
fprintf(fid,'%d\n',Mint(row,end));
end
fclose(fid);
示例输出
0.392227 0.276923 0.317099 17 24 1 8 15
0.655478 0.046171 0.950222 23 5 7 14 16
0.171187 0.097132 0.034446 4 6 13 20 22
0.706046 0.823458 0.438744 10 12 19 21 3
0.031833 0.694829 0.381558 11 18 25 2 9