如何在Matlab中将具有不同类型数据的2个矩阵写入单个文件?

时间:2016-06-29 07:21:43

标签: matlab matrix file-io

我有2个矩阵,一个有浮点数,另一个有整数。两个矩阵都有相同的行数但列数不同。

我想将两个矩阵一起写入一个文件,每一行由并排打印的每个矩阵中的一行组成。

我该怎么做?

我的尝试(不成功):

0xe+foo

3 个答案:

答案 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