AttributeError: module ‘numpy’ has no attribute ‘int’.
- 0. 错误介绍
- 1. 环境介绍
- 2. 问题分析
- 3. 解决方法
- 3.1 调用解决
- 3.2 库包中存在报错
- 4. 总结
首先,对于自己使用代码dtype=np.int
报错的情况,建议直接修改为np.int_
即可解决,也不用向下看了!!!!
下文主要是针对sklearn
库包中存在大量np.int报错的情况!!!
0. 错误介绍
在使用sklearn
库的metrics
的cohen_kappa_score()
函数以及preprocessing.OneHotEncoder
的fit_transform()
函数时出错。当然包括sklearn中的很多函数。但是,需要注意的是:这里的报错是sklearn
库中调用np.int
报错,与自己书写时使用np.int
报错是不同的。
因为,对于自己书写的np.int
,直接进行修改
就行(修改为:np.int_
,np.int32
或者np.int64
)。而sklearn
库中存在大量使用np.int
的内容,修改过于麻烦,因此专门介绍对于该情况如何解决问题。
代码如下:
from mne.decoding import CSP # Common Spatial Pattern Filteringfrom mne.channels import read_layoutfrom sklearn import preprocessingfrom sklearn.preprocessing import OneHotEncoderfrom sklearn.model_selection import ShuffleSplit# OneHotEncoding Labelsenc = OneHotEncoder()X_out = enc.fit_transform(labels.reshape(-1,1)).toarray()# Cross Validation Split 交叉验证拆分cv = ShuffleSplit(n_splits = 10, test_size = 0.2, random_state = 0)from sklearn.metrics import accuracy_scorefrom sklearn.metrics import cohen_kappa_scorefrom sklearn.metrics import precision_scorefrom sklearn.metrics import recall_scoreacc = []ka = []prec = []recall = []ka.append(cohen_kappa_score(test_trues, test_pres))
报错:
1. 环境介绍
首先,对代码当前使用环境进行简单介绍。
代码环境:python版本为:3.9、numpy版本为:1.25.0、sklearn版本为:0.21.3。 代码中存在大量关于jupyter
的环境,可以在观看的时候将其忽略。
aiofiles 22.1.0aiosqlite0.18.0albumentations 1.2.1anyio3.5.0appdirs1.4.4argon2-cffi21.3.0argon2-cffi-bindings 21.2.0asttokens2.0.5attrs22.1.0Babel2.11.0backcall 0.2.0beautifulsoup4 4.12.2bleach 4.1.0brotlipy 0.7.0certifi2023.5.7cffi 1.15.1charset-normalizer 2.0.4chinese-calendar 1.8.0colorama 0.4.6comm 0.1.2contourpy1.1.0cryptography 39.0.1cycler 0.11.0debugpy1.5.1decorator5.1.1defusedxml 0.7.1entrypoints0.4executing0.8.3fastjsonschema 2.16.2fonttools4.40.0idna 3.4importlib-metadata 6.0.0importlib-resources5.12.0ipykernel6.19.2ipython8.12.0ipython-genutils 0.2.0ipywidgets 8.0.4jedi 0.18.1Jinja2 3.1.2joblib 1.2.0json50.9.6jsonschema 4.17.3jupyter1.0.0jupyter_client 8.1.0jupyter-console6.6.3jupyter_core 5.3.0jupyter-events 0.6.3jupyter_server 2.5.0jupyter_server_fileid0.9.0jupyter_server_terminals 0.4.4jupyter_server_ydoc0.8.0jupyter-ydoc 0.2.4jupyterlab 3.6.3jupyterlab-pygments0.1.2jupyterlab_server2.22.0jupyterlab-widgets 3.0.5kiwisolver 1.4.4lxml 4.9.2MarkupSafe 2.1.1matplotlib 3.7.1matplotlib-inline0.1.6mistune0.8.4mkl-fft1.3.6mkl-random 1.2.2mkl-service2.4.0mne1.4.2nbclassic0.5.5nbclient 0.5.13nbconvert6.5.4nbformat 5.7.0nest-asyncio 1.5.6notebook 6.5.4notebook_shim0.2.2numpy1.25.0packaging23.0pandocfilters1.5.0parso0.8.3pickleshare0.7.5Pillow 10.0.0pip23.1.2platformdirs 2.5.2ply3.11pooch1.4.0prometheus-client0.14.1prompt-toolkit 3.0.36psutil 5.9.0pure-eval0.2.2pycparser2.21Pygments 2.15.1pyOpenSSL23.0.0pyparsing3.1.0pypiwin32223PyQt55.15.7PyQt5-sip12.11.0pyrsistent 0.18.0PySocks1.7.1python-dateutil2.8.2python-json-logger 2.0.7pyttsx32.90pytz 2022.7PyWavelets 1.4.1pywin32305.1pywinpty 2.0.10PyYAML 6.0pyzmq25.1.0qtconsole5.4.2QtPy 2.2.0qudida 0.0.4requests 2.29.0rfc3339-validator0.1.4rfc3986-validator0.1.1scikit-learn 0.21.3scipy1.10.1Send2Trash 1.8.0setuptools 67.8.0sip6.6.2six1.16.0sniffio1.2.0soupsieve2.4stack-data 0.2.0terminado0.17.1threadpoolctl2.2.0tinycss2 1.2.1toml 0.10.2tomli2.0.1torch1.12.1+cu116torchaudio 0.12.1+cu116torchvision0.13.1+cu116tornado6.2tqdm 4.65.0traitlets5.7.1typing_extensions4.6.3urllib31.26.16wcwidth0.2.5webencodings 0.5.1websocket-client 0.58.0wheel0.38.4widgetsnbextension 4.0.5win-inet-pton1.1.0y-py 0.5.9ypy-websocket0.8.2zipp 3.11.0
2. 问题分析
首先对问题进行分析,根据报错信息以及报错中的问题指出可以发现,错误来源于numpy库包在当前版本已经没有了np.int这个用法,而这里却使用了这个用法
。np.int 在 NumPy 1.20 中已弃用,在 NumPy 1.24 中已删除。
具体地址为:~\AppData\Roaming\Python\Python39\site-packages\sklearn\metrics\classification.py:564
(~表示当前电脑用户地址,一般为:C:\user
)
具体代码为:w_mat = np.ones([n_classes, n_classes], dtype=np.int)
错误为:module 'numpy' has no attribute 'int'.
,即不能使用np.int
,需要对其进行替换。
3. 解决方法
3.1 调用解决
对于自己调用np.int
报错,可以通过修改该用法来解决。这里我们点击报错所给的链接,然后得到了下面的图像:
从上面可以看出,对于调用np.int
报错的内容,可以通过将np.int
替换为np.int_
、np.int32
或者np.int64
来解决该报错。
3.2 库包中存在报错
对于上文提及的sklearn
中存在报错的情况,虽然根据报错给出的具体地址
可以找到报错代码
,然后根据上文3.1节
给出的修改方法可以解决该报错。但是,当你下次同样使用该库包时可能仍会
出现上文给出的错误的情况。
因此,这里从sklearn
库创建者的角度思考:我不能容忍一个错误存在这么久。所以,尝试对库包进行更新
,而更新后的库包理论上
应该不会存在该错误。
这里,使用以下命令对sklearn
库包进行更新:
pip install scikit-learn --upgrade --user
最后,得到更新后的sklearn
的版本为:
scikit-learn 1.3.0
最后,实验结果表明:sklearn
库包经更新后,代码可以跑通了!实在是不容易哦!!!
4. 总结
总的而言,感觉出现该错误可能就是我使用的sklearn
版本太低了了(scikit-learn=0.21.3
),不过好歹问题解决了。网上的相关教程根本没有,所以根据自己的经验来总结这篇文章,希望大家会喜欢。如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。
如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦。