使用Python调用libsvm时出现AttributeError错误的求助
解决
AttributeError: Module 'scipy' has no attribute 'ctypeslib'问题 问题根源
Scipy 1.9.0版本起正式移除了scipy.ctypeslib模块,而你使用的libsvm-official 3.25.0仍依赖该模块进行数组转换,因此触发AttributeError。
解决方案
以下三种方法任选其一即可:
1. 降级Scipy到兼容版本
执行命令将Scipy降级到最后保留ctypeslib的1.8.x版本,无需修改代码即可适配现有libsvm:
pip install scipy==1.8.1
2. 修改libsvm源码适配新版Scipy
- 找到libsvm安装路径下的
svm.py文件(示例路径:E:\Pythonlean\machine\venv\lib\site-packages\libsvm\svm.py) - 定位到第218行代码:
scipy.ctypeslib.as_array(self.y, (self.l,))[:] = y - 将其替换为numpy的等价实现:
numpy.ctypeslib.as_array(self.y, (self.l,))[:] = y - 若文件顶部未导入numpy,添加导入语句:
import numpy
3. 升级libsvm到修复版本
执行命令升级libsvm-official,若新版本已适配Scipy 1.9+,则可直接解决问题:
pip install --upgrade libsvm-official
验证
修改完成后重新运行代码,确认报错消失,模型能够正常训练输出。
内容的提问来源于stack exchange,提问作者human
相关产品推荐
相关产品推荐

