通过www.example.com在python中加载八度音程的巨型矩阵scipy.io

mec1mxoz  于 2022-11-10  发布在  Python
关注(0)|答案(1)|浏览(145)

我想在Python中加载一些矩阵,这些矩阵已经在八度音阶中生成并保存为.mat文件。我将它们保存为:save -v7 'y.mat' Ysave ('y.mat', 'Y', '-v7')
其中一个矩阵是50 × 50,另一个矩阵是10,000,000 × 50。
我用Python皮把它们装成:

import scipy.io as sio
Y = sio.loadmat('y.mat')

较小的矩阵已正确加载,输出为数组字典和有关标题、版本等信息。
问题是较大的matric不加载,结果是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

有没有其他方法octave/matlab或格式保存,这将是更容易或至少有可能加载在python?
我还测试了保存无版本(结果是一个巨大的文件)或在其他版本。

bvjxkvbb

bvjxkvbb1#

可能是内存空间不足。
10 e6 *50提供500 e6个值。如果保存为双精度值,则需要大约4 GB的内存。
我在我的Windows PC上使用Spyder IDE下的Python时遇到了内存问题。该应用程序使用pyvisa从oszilloscope中检索曲线。oszilloscope曲线有6个通道,每个通道有3000万个点。当同时将所有曲线保存在内存中时,我遇到了零星的错误。当每个通道只使用100万个点时,程序运行没有任何问题。我猜,python / numpy只能处理内存中最多2 GB的数据。
因为我需要3000万个点,所以我的解决方案是一条一条地处理曲线,所以我在同一时间只有一条曲线在内存中。

相关问题