【问题标题】:Convert dataset of .mat format to .csv octave/matlab将 .mat 格式的数据集转换为 .csv octave/matlab
【发布时间】:2017-11-09 12:06:27
【问题描述】:

本站有.mat格式的数据集:http://www.cs.nyu.edu/~roweis/data.html
我想将格式更改为 .csv。 谁能告诉我如何更改格式以创建 .csv 文件。

谢谢!

【问题讨论】:

  • 您可以访问 Matlab 吗?
  • 是的,我愿意。我也有来自上述网站的所有 .mat 文件

标签: matlab csv


【解决方案1】:

假设站点中的.mat 文件已经可用。在 Matlab 的命令窗口中,你可以写,例如:

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

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

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

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

【讨论】:

  • 没有 MatLab 可以做到这一点吗?有什么工具可以帮助解决这个问题?
【解决方案2】:

你试过 Matlab 中的csvwrite 函数吗?

只需使用 load 函数加载您的 .mat 文件,然后使用 csvwrite 写入它们!

【讨论】:

  • 命令名有错别字。我会编辑它,但更正需要至少 6 个字符长。 :-)
【解决方案3】:

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

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

加载我的文件.mat

保存("-text","myfile.txt","变量名")

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

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

输出文件将文本格式的 .mat 文件内容列为单列(潜在的顺序变量)。应该很容易使用文本编辑器将这些数据按摩到原始矩阵结构中,以便在您喜欢的任何应用程序中使用。

【讨论】:

    【解决方案4】:

    有类似的问题。需要将具有两列数值数据的一系列 .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
    

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 2013-01-03
      • 2015-10-09
      • 2020-05-09
      • 2019-05-08
      • 1970-01-01
      相关资源
      最近更新 更多