将.mat格式的数据集转换为.csv格式的Octave/Matlab。

5
这个网站有一些以.mat格式存储的数据集:http://www.cs.nyu.edu/~roweis/data.html
我想把它们转换成.csv格式。请问有人可以告诉我如何转换并创建.csv文件吗?
谢谢!

你有Matlab的访问权限吗? - user2271770
是的,我有。我也拥有前面提到的网站上的所有.mat文件。 - saha
4个回答

9

假设网站上的.mat文件已经可用。在Matlab的命令行窗口中,您可以写出如下代码:

load('C:\Users\YourUserName\Downloads\mnist_all.mat');

加载.mat文件,结果应该是一组矩阵test0test1、...、train0train1等在您的工作区中创建,并且您希望它们保存为CSV文件。由于它们的大小不同,您需要保存每个变量一个CSV文件,例如(也可以在命令窗口中执行):

csvwrite('C:\Users\YourUserName\Downloads\mnist_test0.csv', test0);

对于每个变量重复执行该命令,并且不要忘记更改输出文件的名称以避免覆盖。


3
不使用MatLab可以实现吗?有没有其他工具可以帮助实现这一点? - ypriverol

3

你在Matlab中尝试过csvwrite函数了吗?

只需使用load函数加载你的.mat文件,然后用csvwrite写入即可!


1
命令名称中有一个错别字。我想编辑它,但更正至少需要6个字符长度。 :-) - user2271770

2

我曾遇到类似的问题。需要将一系列包含两列数字数据的.mat文件转换为标准数据文件(ASCII文本)。请注意,我并不经常使用csv,但是可以通过使用csvwrite代替标准save来适应所有内容。

使用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

2

我没有Matlab许可证,所以我在Windows 10上安装了GNU Octave 4.2.1(2017)(感谢John W.Eaton和其他人)。使用csvwrite时我并不完全成功,因此我使用了以下解决方法。(顺便说一下,我在Octave领域完全不称职。csvwrite对于简单的数据结构有效。)

在命令窗口中,我使用了以下两个命令:

load myfile.mat

save("-text","myfile.txt","variablename")

当“myfile.mat”被加载时,数据向量的变量名将在工作区窗口中显示。这是在保存命令中使用的名称。有些.mat文件会加载多个数据结构。

“-text”选项是默认选项,因此您可能不需要在命令中包含此选项。

输出文件以文本格式列出.mat文件内容作为单列(可能是连续变量)。使用文本编辑器轻松地将此数据调整为原始矩阵结构,以供您使用任何您熟悉的应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接