将MATLAB变量导出为Python文本文件
首先,我想说我在matlab方面完全是个新手。我平时用的是python,现在我收到了一个matlab文件里的数据,需要把它导出成我可以在python中使用的格式。
我在网上查了一下,发现可以用以下方法把matlab中的变量导出到文本文件:
dlmwrite('my_text', MyVariable, 'delimiter' , ',');
我需要导出的变量是一个16000行4000列的矩阵,里面的数字是像0.006747668446927
这样的双精度浮点数。问题就出在这里。我需要导出每个数字的完整值。用那个方法导出后,得到的数字格式是0.0067477
。这样不行,因为我需要更高的精度来完成我的工作。那么,我该如何导出这些变量的完整值呢?或者如果你有更好的方法可以在python中使用这个巨大的matlab矩阵,请随意分享。
祝好,
Bogdan
4 个回答
Scipy有一些工具可以直接读取MATLAB的.mat文件,具体可以参考这个链接:http://www.janeriksolem.net/2009/05/reading-and-writing-mat-files-with.html
虽然我喜欢基于hdf5的解决方案,但我还是觉得文本文件和CSV文件对于小型数据来说挺不错的(你可以用文本编辑器、电子表格等打开它们)。在这种情况下,我会使用MATLAB的fopen/fprintf/fclose,而不是dlmwrite,因为我喜欢把事情做得更明确。不过,dlmwrite可能在处理多维数组时更好用。
如果你想在Python和Matlab之间传输大量数字数据,我推荐使用HDF5格式。
在Python中使用HDF5的库叫做h5py。
下面是两个例子,展示如何在这两个语言之间传输数据。首先是从Matlab到Python的例子:
% matlab
points = [1 2 3 ; 4 5 6 ; 7 8 9 ; 10 11 12 ];
hdf5write('test.h5', '/Points', points);
# python
import h5py
with h5py.File('test.h5', 'r') as f:
points = f['/Points'].value
接下来是从Python到Matlab的例子:
# python
import h5py
import numpy
points = numpy.array([ [1., 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ])
with h5py.File('test.h5', 'w') as f:
f['/Points'] = points
% matlab
points = hdf5read('test.h5', '/Points');
注意:在Matlab中的一列数据在Python中会变成一行,反之亦然。这不是错误,而是因为C语言和Fortran在内存中处理连续数据的方式不同。