【问题标题】:Matrix from Python to MATLAB从 Python 到 MATLAB 的矩阵
【发布时间】:2010-11-08 21:04:19
【问题描述】:

我现在正在使用 Python 和 MATLAB,并且我在 Python 中有一个二维数组,我需要将其写入文件,然后能够将其作为矩阵读入 MATLAB。关于如何做到这一点的任何想法?

谢谢!

【问题讨论】:

    标签: python matlab file-io import matrix


    【解决方案1】:

    如果使用numpy/scipy,可以使用scipy.io.savemat函数:

    import numpy, scipy.io
    
    arr = numpy.arange(9) # 1d array of 9 numbers
    arr = arr.reshape((3, 3))  # 2d array of 3x3
    
    scipy.io.savemat('c:/tmp/arrdata.mat', mdict={'arr': arr})
    

    现在,您可以使用 File -> Load Data 将此数据加载到 MATLAB 中。选择文件,arr 变量(一个 3x3 矩阵)将在您的环境中可用。

    注意:我是在 scipy 0.7.0 上完成的。 (scipy 0.6 在scipy.io.mio 模块中有savemat。)请参阅latest documentation for more detail

    编辑:感谢@gnovice更新链接。

    【讨论】:

    • 该链接似乎对我不起作用。也许这个会更好:docs.scipy.org/doc/scipy/reference/generated/…
    • 该链接在我的末尾可以正常工作。但是您的链接更好——它适用于最新的文档(0.7+),而我的适用于 0.6,因此模块不同(我有一个旧书签)。谢谢新手!
    【解决方案2】:

    工具箱npy-matlab可以将*.npy二进制文件读入MATLAB。 *.npy 文件可以直接用 NumPy 模块导出。来自文档:

    >> a = rand(5,4,3);
    >> writeNPY(a, 'a.npy');
    >> b = readNPY('a.npy');
    >> sum(a(:)==b(:))
    ans =
    
        60
    

    npy-matlab 是一个简单的 M 文件集合 available from GitHub,具有 2 条款 BSD 许可证。

    【讨论】:

      【解决方案3】:

      我可能会在 Python 中使用 numpy.savetxt('yourfile.mat',yourarray) 然后在 MATLAB 中 yourarray = load('yourfile.mat')

      【讨论】:

      • 在 MATLAB 2016b 中,这仅在您使用 yourarray = load('yourfile.mat', '-ASCII') 时有效。
      【解决方案4】:

      你也可以直接从pythoncall matlab

      from mlabwrap import mlab
      import numpy 
      a = numpy.array([1,2,3])
      mlab.plot(a)
      

      【讨论】:

        【解决方案5】:

        我认为ars 有最直接的答案,可以将数据从 Python 保存到 .mat 文件(使用savemat)。为了增加他们的答案,您还可以使用 LOAD 函数以编程方式将 .mat 文件加载到 MATLAB 中,而不是使用 MATLAB 命令窗口菜单手动执行...

        您可以使用 命令语法 形式的 LOAD:

        load c:/tmp/arrdata.mat
        

        函数语法形式(如果您将文件路径存储在字符串中):

        filePath = 'c:/tmp/arrdata.mat';
        data = load(filePath);
        

        【讨论】:

        • +1;整洁的!我没有使用足够多的 matlab,并且总是在菜单中摸索而不是仅仅寻找正确的命令。负载似乎很明显。咳咳。 :-)
        【解决方案6】:

        我写了一个小函数来做同样的事情,而不需要 numpy.它接受一个列表并返回一个带有 MATLAB 格式矩阵的字符串。

        def arrayOfArrayToMatlabString(array):
            return '[' + "\n ".join(" ".join("%6g" % val for val in line) for line in array) + ']'
        

        "myMatrix = " + arrayOfArrayToMatlabString(array)写入.m文件,在matlab中打开,执行。

        【讨论】:

          【解决方案7】:

          您可以在 Python 中将矩阵写入 CSV 文件,然后在 MATLAB 中使用 csvread 读取它。

          【讨论】:

          猜你喜欢
          • 2017-11-12
          • 1970-01-01
          • 2022-08-18
          • 2015-08-23
          • 2015-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多