【发布时间】:2017-11-09 12:06:27
【问题描述】:
本站有.mat格式的数据集:http://www.cs.nyu.edu/~roweis/data.html
我想将格式更改为 .csv。
谁能告诉我如何更改格式以创建 .csv 文件。
谢谢!
【问题讨论】:
-
您可以访问 Matlab 吗?
-
是的,我愿意。我也有来自上述网站的所有 .mat 文件
本站有.mat格式的数据集:http://www.cs.nyu.edu/~roweis/data.html
我想将格式更改为 .csv。
谁能告诉我如何更改格式以创建 .csv 文件。
谢谢!
【问题讨论】:
假设站点中的.mat 文件已经可用。在 Matlab 的命令窗口中,你可以写,例如:
load('C:\Users\YourUserName\Downloads\mnist_all.mat');
加载.mat文件;结果应该是在您的工作区中创建的一组矩阵test0、test1、...、train0、train1...,您希望将其保存为 CSV 文件。因为它们的大小不同,您需要为每个变量保存一个 CSV,例如(也在命令窗口中):
csvwrite('C:\Users\YourUserName\Downloads\mnist_test0.csv', test0);
对每个变量重复该命令,并且不要忘记更改输出文件的名称以避免覆盖。
【讨论】:
我没有 Matlab 许可证,因此我在 Windows 10 上安装了 GNU Octave 4.2.1 (2017)(感谢 John W. Eaton 和其他人)。我使用 csvwrite 并没有完全成功,所以我使用了以下解决方法。 (顺便说一句,我在 Octave 世界中完全无能。csvwrite 适用于简单的数据结构)。
在命令行窗口中我使用了以下两个命令
加载我的文件.mat
保存("-text","myfile.txt","变量名")
加载“myfile.mat”时,加载的数据向量的变量名称显示在工作区窗口中。这是保存命令中使用的名称。一些 .mat 文件会加载多个数据结构。
“-text”选项是默认选项,因此您可能不需要在命令中包含此选项。
输出文件将文本格式的 .mat 文件内容列为单列(潜在的顺序变量)。应该很容易使用文本编辑器将这些数据按摩到原始矩阵结构中,以便在您喜欢的任何应用程序中使用。
【讨论】:
有类似的问题。需要将具有两列数值数据的一系列 .mat 文件转换为标准数据文件(ascii 文本)。请注意,我从来没有真正使用过 csv,但这里的所有内容都可以通过使用 csvwrite 而不是标准保存来进行调整。
使用 Octave 4.2.1 ....
load myfile.mat
LI = [L, I] ## L and I are column vectors representing my data
save myfile.txt LI
请注意,L 和 I 似乎是 Octave 为我的原始数据文件中的两个列向量选择的默认变量名称。理想情况下,在我的目录中迭代所有具有 .mat 扩展名的文件的脚本将是理想的,但这完成了工作。它将数据保存为两个空格分隔的数据列。
***更新
以下脚本适用于 Octave 4.2.1,用于处理同一目录中具有 .mat 扩展名的一系列数据文件。它将遍历它们并将数据写入具有相同名称但扩展名为 .dat 的文本文件。请注意,这效率不高,因此如果您有很多文件或文件很大,则可能需要一段时间才能运行。我建议您使用octave mat2dat.m 从命令行运行它,这样您就可以实际观看它了。
我不保证这对你有用,但它对我有用。我也不精通 Octave 或 Matlab,所以我确信存在更好的解决方案。
# mat2dat.m
dirlist = glob("*.mat")
for i=1:length(dirlist)
filename = dirlist{i,1}
load(filename, "L", "I")
LI = [L,I]
tmpname = filename(1:length(filename)-3)
txtname = strcat(tmpname, 'dat')
save(txtname, "LI")
end
【讨论】: