我想在python中加载一些以八度生成并保存为.mat
文件的矩阵。 我将它们保存为:save -v7 'y.mat' Y
或save ('y.mat', 'Y', '-v7')
其中一个矩阵是 50 x 50,另一个是 10,000,000 x 50。
我在 python 中加载它们为:
import scipy.io as sio
Y = sio.loadmat('y.mat')
较小的矩阵已正确加载,输出是一个数组的字典以及有关标头、版本等的信息。
问题是更大的矩阵不会加载,结果是OSError: could not read bytes
完整错误如下:
OSError Traceback (most recent call last)
<ipython-input-19-b5ea6427914d> in <module>()
----> 1 Y = sio.loadmat('y.mat')
/usr/lib/python3/dist-packages/scipy/io/matlab/mio.py in loadmat(file_name, mdict, appendmat, **kwargs)
134 variable_names = kwargs.pop('variable_names', None)
135 MR = mat_reader_factory(file_name, appendmat, **kwargs)
--> 136 matfile_dict = MR.get_variables(variable_names)
137 if mdict is not None:
138 mdict.update(matfile_dict)
/usr/lib/python3/dist-packages/scipy/io/matlab/mio5.py in get_variables(self, variable_names)
290 continue
291 try:
--> 292 res = self.read_var_array(hdr, process)
293 except MatReadError as err:
294 warnings.warn(
/usr/lib/python3/dist-packages/scipy/io/matlab/mio5.py in read_var_array(self, header, process)
250 `process`.
251 '''
--> 252 return self._matrix_reader.array_from_header(header, process)
253
254 def get_variables(self, variable_names=None):
scipy/io/matlab/mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy/io/matlab/mio5_utils.c:7578)()
scipy/io/matlab/mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy/io/matlab/mio5_utils.c:6575)()
scipy/io/matlab/mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.read_real_complex (scipy/io/matlab/mio5_utils.c:8049)()
scipy/io/matlab/mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.read_numeric (scipy/io/matlab/mio5_utils.c:4575)()
scipy/io/matlab/mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.read_element (scipy/io/matlab/mio5_utils.c:4143)()
scipy/io/matlab/streams.pyx in scipy.io.matlab.streams.ZlibInputStream.read_string (scipy/io/matlab/streams.c:3261)()
scipy/io/matlab/streams.pyx in scipy.io.matlab.streams.ZlibInputStream.read_into (scipy/io/matlab/streams.c:3185)()
OSError: could not read bytes
有没有其他方式可以保存八度/矩阵或格式,在 python 中加载会更容易或至少可能?
我还测试了在没有版本(结果是一个巨大的文件(或其他版本中保存。
可能是内存空间不足。
10e6*50 给出 500e6 值。如果另存为双精度,则在大约 4 GB 的内存中。
我确实在Windows PC上使用Spyder IDE下的Python遇到了内存问题。 该应用程序使用pyvisa从示波器中检索曲线。示波器曲线,其中 6 个通道,每个通道 3000 万个点。当同时将所有曲线保存在内存中时,我遇到了零星的错误。当每个通道仅使用100万个点时,程序运行没有任何问题。我猜,python/numpy只能在内存中处理最多2 GB的数据。
由于我需要 3000 万个点,我的解决方案是逐个处理曲线。所以我同时在内存中只有一条曲线。