<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Numpy 1.24版本中,刪除了像np.float
、np.int
這樣的 Python 內建型別的 alias,因此以後在程式碼中使用這些型別會報錯AttributeError: module 'numpy' has no attribute 'float'
, 涉及的型別包括:
numpy.bool
numpy.int
numpy.float
numpy.complex
numpy.object
numpy.str
numpy.long
numpy.unicode
那該怎麼解決這個錯誤呢?
TL;DR
foo = np.random.rand(10) # 原先用法,注意foo[0]是一個標量 bar = np.float(foo[0]) # 新用法 bar = float(foo[0])
np.ndarray
上的操作,使用np.float64
或np.float32
來替代,具體選擇哪個需要自己根據情況來確定,不同型別精度會有不同,下面舉兩個例子:# 原先用法 foo = np.random.rand(10, dtype=np.float) # 新用法 foo = np.random.rand(10, dtype=np.float32) # 原先用法 foo = np.random.rand(10).astype(np.float) # 新用法 foo = np.random.rand(10).astype(np.float32)
這裡列出來了刪除型別在標量和np.ndarray
上的替代,方便查詢
原先型別 | 標量替換型別 | np.ndarray替換型別 |
---|---|---|
np.int | int | np.int32/np.int64 |
np.float | float | np.float32/np.float64 |
np.bool | bool | np.bool_ |
np.complex | complex | np.complex128 |
np.object | object | - |
np.str | str | np.str_ |
np.long | int | np.int32/np.int64 |
np.unicode | str | np.str_ |
詳細說明參考NumPy 1.20.0 Release Notes。
下面詳細說說事情的來龍去脈。
下面我搭建 Numpy 1.20.0 和 1.24.0 的環境進行簡單測試,以及分析為什麼會棄用這些型別。
首先是 Numpy 1.20.0 環境搭建與簡單測試:
python -m venv np1.20 source np1.20/bin/activate pip install numpy==1.20 python -c "import numpy as np; a = np.array([1.0], dtype=np.float)"
輸出如下:
<string>:1: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here. Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html
仔細看這段輸出的話,可以發現從 Numpy 1.20 版本開始,Numpy已經棄用np.float
型別了,並且給出了替換建議,以及詳細的說明檔案地址。
而在 Numpy 1.24版本里面,正式刪除了np.float
,可以用下面的程式碼來測試。 首先我們建立一個新的環境,安裝Numpy 1.24版本,然後建立一個np.float
型別的陣列:
python -m venv np1.24 source np1.24/bin/activate pip install numpy==1.24 python -c "import numpy as np; a = np.array([1.0], dtype=np.float)"
輸出如下:
Traceback (most recent call last): File "<string>", line 1, in <module> File "/Users/name/np1.24/lib/python3.9/site-packages/numpy/__init__.py", line 284, in __getattr__ raise AttributeError("module {!r} has no attribute " AttributeError: module 'numpy' has no attribute 'float'
直接就報了我們開頭提到的屬性錯誤。
其實早在2015年,Numpy 開發者就在策劃刪除這些型別了,只不過當時使用範圍太廣,刪除造成的影響太大,所以在近8年,1.20-1.24 4個版本的Warning後,才正式刪除。
為什麼要刪除這些操作呢?我自己覺得是因為np.float
這種型別太容易誤用了。大家都以為np.float
是一個Numpy的資料型別,是np.float32
的alias,但實際它是內建型別,是int
型別的alias。 就像下面這個例子:
>>> foo = np.array([10], dtype=np.int32) >>> bar = np.int(foo) >>> type(bar) <class 'int'> >>> baz = np.int32(foo) >>> type(baz) <class 'numpy.ndarray'>
可以看到,對np.ndarray
陣列進行np.int
和np.int32
的操作,一個得到int
型別的變數,另一個得到的是np.ndarray
型別的變數。
詳細的原因可以參考上面的 issue 連結。
那最早為什麼還要引入np.float
呢?直接用Python內建的型別不好嗎?其實這是在很早的Numpy版本中錯誤地引入的,那個版本np.float
的含義就是np.float64
,只不過後來版本中np.float
的含義修改了,但如果直接刪除np.float
,有人使用老版本的Numpy,就會在執行from numpy import *
報錯。當前那個老版本已經很少有人用了 ,所以就刪除了。
這個改動帶來的影響可以說是非常大了,簡單來說,在 Numpy 1.24.0以上的版本中,使用np.float
的程式碼都會直接報錯。而 Numpy 作為 Python 在科學計算中的基礎包,被廣泛使用的程度無需我贅述。
簡單在GitHub 搜尋了一下,光涉及到np.float
的(結果1, 結果2)就有近9萬行程式碼,我自己短期內就在兩個倉庫中遇到這個問題。好在解決辦法也比較直接,希望可以順利的過渡過去。
以上就是python程式設計學習np.float 被刪除的問題解析的詳細內容,更多關於python np.float 被刪除的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45