我目前正在使用Python和MATLAB,并且在Python中有一个2D数组,我需要将其写入文件,然后能够在MATLAB中读取为矩阵。有什么好的方法吗?
谢谢!
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更新链接。
我写了一个小函数来完成相同的事情,无需使用numpy。它接受一个列表的列表,并返回一个用MATLAB格式化的矩阵字符串。
def arrayOfArrayToMatlabString(array):
return '[' + "\n ".join(" ".join("%6g" % val for val in line) for line in array) + ']'
"myMatrix = " + arrayOfArrayToMatlabString(array)
写入.m
文件,然后在matlab中打开该文件并执行它。我会在Python中使用numpy.savetxt('yourfile.mat',yourarray)
,然后在MATLAB中使用yourarray = load('yourfile.mat')
。
yourarray = load('yourfile.mat', '-ASCII')
才能正常工作。 - Tokkot你也可以直接从Python中调用Matlab:
from mlabwrap import mlab
import numpy
a = numpy.array([1,2,3])
mlab.plot(a)
*.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许可证。