gpt4 book ai didi

matlab - 将 .mat 转换为 .csv octave/matlab

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:47 25 4
gpt4 key购买 nike

我正在尝试编写一个将 .mat 文件转换为 .csv 文件的 Octave 程序。 .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 文件。

谢谢!

最佳答案

问题是,如果 ychar 类型,您的 X 向量也会转换为 char。由于您的标签只是数字,您可以简单地将它们转换为数字并使用 csvwrite 保存数据:

csvwrite('data.txt', [str2num(y) X]);

编辑 此外,在循环中,您使用整数转换%d 保存数字,而如果您的数据类型为csvwrite,则写入 double 值。如果零不完全为零,csvwrite 将使用科学记数法写入它们,而您的循环将对它们进行舍入。因此会有不同的行为。

关于matlab - 将 .mat 转换为 .csv octave/matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12849242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com