【发布时间】:2017-05-17 13:25:27
【问题描述】:
我有一个来自 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`
错误/问题对我来说很清楚。我的问题:有什么解决方法吗?我还能读取文件并获取数据吗?读取数组时是否可以拆分数组?
【问题讨论】:
-
我不同意。这肯定与上面链接的问题不是重复。
-
@littleHue 您能否具体说明您如何解释该错误?尽管您可能清楚该信息,但可能知道解决方案的每个人都可能不清楚,或者您的解释可能是错误的。 -- 据我了解文件已损坏的错误消息。
-
您好,与链接问题的区别在于文件格式。我不确定是否可以使用 fseek/read 读取 .mat 文件。 @kazemakase:数组的条目比 long_int 允许的多。这是因为 Dymola 使用愚蠢的格式来保存其结果。关键的错误信息是:在 long_scalars 中遇到溢出剩余字节 = hdr.dtype.itemsize * n
-
@littleHue 请原谅我的愚蠢问题——我不熟悉 Dymola。您是说 Dymola 将结果保存为 Matlab 的 .mat 文件格式但不符合规范?还是文件没问题,scipy 的
loadmat例程中存在错误?