我正在尝试编写一个Octave程序,将.mat文件转换为.csv文件。.mat文件包含矩阵X和列向量y。X中填充了0和1,y中填充了从1到10的标签。我想把y放在X前面,并将其写成.csv文件。
以下是我的第一种方法的代码片段:
以下是我的第一种方法的代码片段:
load(filename, "X", "y");
z = [y X];
basename = split{1};
csvname = strcat(basename, ".csv");
csvwrite(csvname, z);
生成的文件包含许多非常小的十进制数,例如8.560596795891285e-06、1.940359477121703e-06等。
我的第二个方法是循环遍历并手动将值写入.csv文件:
load(filename, "X", "y");
z = [y X];
basename = split{1};
csvname = strcat(basename, ".csv");
csvfile = fopen(csvname, "w");
numrows = size(z, 1);
numcols = size(z, 2);
for i = 1:numrows
for j = 1:numcols
fprintf(csvfile, "%d", z(i, j));
if j == numcols
fprintf(csvfile, "\n");
else
fprintf(csvfile, ",");
end
end
end
fclose(csvfile);
我得到了正确的结果,但是花费了很长时间。
有人能告诉我如何使用csvwrite以正确的方式写入数值,或者如何更有效地手动创建.csv文件。
谢谢!
X
并查看结果。然后输入whos
以查看y
和X
的类型。 - angainornum2str(X,’%.10f’)
。 - angainorcsvwrite
不会这样做,这就是你得到不同结果的原因。 - angainor