使用 scipy 从 mat 中读取非常长的数组

Read very long array from mat with scipy

我有一个来自 Dymola (.mat v4) 的结果文件,它将所有变量存储在一个巨大的一维数组中(一个数组中大约有 2GB 的数据...)。我无法对文件格式做任何事情,因为我们必须使用 Dymola。尝试使用 scipy(使用 Python 2.7.13 64 位)读取文件时,出现以下错误:

C:\Users\...\scipy\io\matlab\mio4.py:352: RuntimeWarning: overflow encountered 
in long_scalars
remaining_bytes = hdr.dtype.itemsize * n
C:\...\scipy\io\matlab\mio4.py:172: RuntimeWarning: overflow 
encountered in long_scalars
num_bytes *= d
Traceback (most recent call last):
File 
...
self.mat = scipy.io.loadmat(fileName, chars_as_strings=False)
File "C:\...\scipy\io\matlab\mio.py", line 136, in loadmat
matfile_dict = MR.get_variables(variable_names)
File "C:\...\scipy\io\matlab\mio4.py", line 399, in get_variables
mdict[name] = self.read_var_array(hdr)
File "C:\...\scipy\io\matlab\mio4.py", line 374, in read_var_array
return self._matrix_reader.array_from_header(header, process)
File "C:\...\scipy\io\matlab\mio4.py", line 137, in array_from_header
arr = self.read_full_array(hdr)
File "C:\...\scipy\io\matlab\mio4.py", line 207, in read_full_array
return self.read_sub_array(hdr)
File "C:\...\scipy\io\matlab\mio4.py", line 178, in read_sub_array
"`variable_names` kwarg to `loadmat`" % hdr.name)
ValueError: Not enough bytes to read matrix 'data_2'; is this a badly-formed 
file? Consider listing matrices with `whosmat` and loading named matrices with `variable_names` kwarg to `loadmat`

error/problem 我已经很清楚了。我的问题:有没有解决方法?我还能读取文件并获取数据吗?读取数组时是否可以拆分数组?

我建议您打开转换为基于HDF5 的SDF 文件格式。这种格式可以更好地处理大文件。参见 Simulation/Setup。

或者,您可以使用 Dymola 中的变量选择来减少文件中存储的变量数量。