我正在试图克服以下代码段引发的一些错误:
import os
from libsvm.svmutil import *
from scipy.io import loadmat
data = loadmat(os.path.join('Data','ex6data1.mat'))
X,y = data['X'],data['y'][:,0]
model = svm_train(y,X,'-s 0 -t 2 -c 0.2 -g 2.8')
print(model)
它会产生此错误:
Traceback (most recent call last):
File "E:\Pythonlean\machine\venv\lib\site-packages\scipy\__init__.py", line 214, in __getattr__
return globals()[name]
KeyError: 'ctypeslib'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:\Pythonlean\machine\Exercise6\test2.py", line 7, in <module>
model = svm_train(y,X,'-s 0 -t 2 -c 0.2 -g 2.8')
File "E:\Pythonlean\machine\venv\lib\site-packages\libsvm\svmutil.py", line 92, in svm_train
prob = svm_problem(y, x, isKernel=(param.kernel_type == PRECOMPUTED))
File "E:\Pythonlean\machine\venv\lib\site-packages\libsvm\svm.py", line 218, in __init__
scipy.ctypeslib.as_array(self.y, (self.l,))[:] = y
File "E:\Pythonlean\machine\venv\lib\site-packages\scipy\__init__.py", line 216, in __getattr__
raise AttributeError(
AttributeError: Module 'scipy' has no attribute 'ctypeslib'
所有包版本:
libsvm-official(3.25.0)
scipy(1.9.0)
numpy(1.23.1)
发布于 2022-08-12 00:22:24
libsvm-official
版本3.25.0
的库代码包含一个使用scipy.ctypeslib
的引用,该引用并不存在。你要么修补他们的代码,要么更新库。
引用这个问题的评论
ctypeslib实际上来自于numpy。最好直接从那里进口。 映射all命名空间中的所有numpy符号是我们可能不会再次做出的早期设计决策。FWIW,我建议只对它显式提供的子包使用and,而忽略numpy中反映的所有内容。直接从numpy进口numpy的东西。 #10290中不推荐使用numpy镜像(在#15230中实际删除ctypeslib和其他从numpy导入的模块,尽管这看上去主要是偶然的)。只有函数才会得到不推荐的警告处理,因为与调用函数不同,很难实现访问模块的弃用。
相应的PR,如果这些被废弃的话是在SciPy 1.4.0中发布的。当前代码必须使用numpy.ctypeslib
。libsvm-official
3.25.0于2021年4月发布,这有点令人惊讶,但贬义PR于2019年10月合并。哦,好吧。
好消息是,最新版本3.3的变化量g已经修复了这个问题:
3.3: 2022/8/11引入的单级概率输出直接使用numpy使用numpy,而不是在枕叶中使用镜像的
因此,希望能够将库更新为libsvm-official==3.3
,从而解决这个问题。这个版本是全新的(当我发布这篇文章时,上面的日期几乎是“今天”),但它是还没有在PyPI上。希望他们能很快上传到PyPI上。
https://stackoverflow.com/questions/73320617
复制相似问题