【Python学习笔记】scipy.loadmat()报错:zlib.error: Error -3 while decompressing data: incorrect data check

本文探讨了解决在Python中使用scipy和mat4py读取.mat文件时遇到的zlib.error错误-3的问题。错误源于文件由C#生成且可能包含未知压缩,导致解压失败。文中提供了一种临时解决方案,即通过MATLAB重新生成文件,但寻求更高效的批量处理方法。
部署运行你感兴趣的模型镜像

python打开.mat文件(scipy读取时文件名后缀.mat可省略):

import scipy.io as sio

data = sio.loadmat(r"filename")

print(type(data))
print(data.keys())
print(data)

报错,在loadmat()时出错: zlib.error: Error -3 while decompressing data: incorrect data check

查看了scipy的相关源码也没有找到有关解压的部分。

 

继续查了很多资料,没有人在loadmat时出现过error -3。但找到了另一个读取mat文件的方法:

import mat4py

data = mat4py.loadmat("filename.mat")

print(data)

same error  ┓( ´∀` )┏

后来确认了一下,所打开的.mat文件由于是C#直接生成的,可能对数据进行了未知的压缩。因此会涉及到解压的问题。

 

目前解决方案是将文件由MATLAB打开并重新生成matfile,但对于大量数据来说这不是一个理想的解决措施。将问题遗留在此,若哪天解决了再进行补充。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### scipy.io.loadmat 函数使用时遇到的错误解决方案 当尝试加载较大的 `.mat` 文件(如850MB),可能会遭遇 `MemoryError` 错误。这主要是由于 Python 进程可用内存不足所致[^1]。 对于此类问题,可以采取以下几种方法来缓解: #### 方法一:分块读取数据 如果可能的话,考虑将大文件分割成更小的部分分别处理。虽然 MATLAB 的 `.mat` 文件不支持直接按块读取,但是可以通过先转换为其他格式再进行部分读入的方式间接实现这一目标。 #### 方法二:优化现有代码中的内存管理 确保程序中没有不必要的对象占用过多内存空间。关闭不再使用的变量,并调用垃圾回收器以释放未被引用的对象所占的空间: ```python import gc gc.collect() ``` #### 方法三:调整操作系统级别的参数设置 增加虚拟内存大小或配置交换分区可以帮助提高系统的整体性能,在一定程度上减轻因物理RAM有限而导致的问题。 #### 方法四:采用替代库 有时 SciPy 的 `loadmat()` 可能不是最佳选择。第三方库 h5py 或 PyTables 对于大型矩阵存储有更好的表现,特别是针对 HDF5 格式的 .mat v7.3 文件版本。这些工具允许随机访问大数据集而无需一次性将其全部载入内存。 #### 方法五:查找并指定所需的数据字段 很多时候整个 `.mat` 文件并非都需要立即加载到内存里。通过预先了解要提取的具体子集名称,可以在加载过程中仅获取必要的部分。例如,可以通过如下方式打印出所有键名从而确认具体感兴趣的内容: ```python from scipy import io as spio input_image = spio.loadmat('path_to_file.mat') print(list(input_image.keys())) ``` 之后可以根据实际需求选取特定条目而不是默认加载整张表单[^2]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值