Python到MATLAB的矩阵转换

53

我目前正在使用Python和MATLAB,并且在Python中有一个2D数组,我需要将其写入文件,然后能够在MATLAB中读取为矩阵。有什么好的方法吗?

谢谢!

7个回答

76
如果你使用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})

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

注意:我在scipy 0.7.0上进行了此操作。(scipy 0.6在scipy.io.mio模块中有savemat)。有关更多详细信息,请参见最新文档

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


1
那个链接对我似乎不起作用。也许这个链接会更好: http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.savemat.html - gnovice
链接在我的端上运作良好。但是你的链接更好——它是最新文档(0.7+),而我的是0.6,因此模块不同(我有一个旧书签)。谢谢gnovice! - ars

9
我认为ars的回答最为简单明了,可以用savemat函数将数据保存为.mat文件。除此之外,您还可以使用LOAD函数来自动加载.mat文件到MATLAB中,而不是手动在MATLAB命令行菜单中进行操作。
您可以使用命令语法形式的LOAD函数:
load c:/tmp/arrdata.mat

或者使用函数语法形式(如果你已经将文件路径存储在一个字符串中):
filePath = 'c:/tmp/arrdata.mat';
data = load(filePath);

1
+1;太好了!我不常用Matlab,总是在菜单中翻来覆去,而不是直接寻找正确的命令。Load似乎很明显。啊咳。 :-) - ars

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中打开该文件并执行它。

6

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


1
在MATLAB 2016b中,只有使用yourarray = load('yourfile.mat', '-ASCII')才能正常工作。 - Tokkot

4

你也可以直接从Python中调用Matlab

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

4
工具箱 npy-matlab 可以将 *.npy 二进制文件读取到 MATLAB 中。可以直接使用 NumPy 模块导出 *.npy 文件。根据文档介绍:
>> a = rand(5,4,3);
>> writeNPY(a, 'a.npy');
>> b = readNPY('a.npy');
>> sum(a(:)==b(:))
ans =

    60

npy-matlab是一个简单的M文件集合,可以在GitHub上获取,使用2条款的BSD许可证。


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


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