摘要:其他數據類型在中沒有對應。因此,使用數組標量確保了數組和標量之間具有相同的行為,無論值在不在數組中。不提供比的精度更高的特別是位四精度數據類型的是不能用的。
原文:Data types
譯者:飛龍
?
數組類型和類型之間的轉換另見
數據類型對象
NumPy支持的數值類型比Python更多。這一節會講述所有可用的類型,以及如何改變數組的數據類型。
數據類型 | 描述 |
---|---|
bool_ | 以字節存儲的布爾值(True 或 False) |
int_ | 默認的整數類型(和 C 的 long 一樣,是 int64 或者 int32) |
intc | 和 C 的 int 相同(一般為 int64 或 int32) |
intp | 用于下標的整數(和 C 的 ssize_t 相同,一般為int64 或者 int32) |
int8 | 字節(-128 到 127) |
int16 | 整數(-32768 到 32767) |
int32 | 整數(-2147483648 到 2147483647) |
int64 | 整數(-9223372036854775808 到 9223372036854775807) |
uint8 | 無符號整數(0 到 255) |
uint16 | 無符號整數(0 到 65535) |
uint32 | 無符號整數(0 到 4294967295) |
uint64 | 無符號整數(0 到 18446744073709551615) |
float_ | float64 的簡寫 |
float16 | 半精度浮點:1位符號,5位指數,10位尾數 |
float32 | 單精度浮點:1位符號,8位指數,23位尾數 |
float64 | 雙精度浮點:1位符號,11位指數,52位尾數 |
complex_ | complex128 的簡寫 |
complex64 | 由兩個32位浮點(實部和虛部)組成的復數 |
complex128 | 由兩個64位浮點(實部和虛部)組成的復數 |
此外,Intel平臺相關的C整數類型 short、long,long long 和它們的無符號版本是有定義的。
NumPy數值類型是dtype對象的實例,每個都有獨特的特點。一旦你導入了NumPy:
>>> import numpy as np
這些 dtype 都可以通過 np.bool_ , np.float32 以及其它的形式訪問。
更高級的類型不在表中給出,請見結構化數組一節。
有5種基本的數值類型:布爾(bool),整數(int),無符號整數(uint),浮點(float)和復數。其中的數字表示類型所占的位數(即需要多少位代表內存中的一個值)。有些類型,如int和intp,依賴于平臺(例如32位和64位機)有不同的位數。在與低級別的代碼(如C或Fortran)交互和在原始內存中尋址時應該考慮到這些。
數據類型可以用做函數,來將Python類型轉換為數組標量(詳細解釋請見數組標量一節),或者將Python的數值序列轉換為同類型的NumPy數組,或者作為參數傳入接受dtype的關鍵詞的NumPy函數或方法中,例如:
>>> import numpy as np >>> x = np.float32(1.0) >>> x 1.0 >>> y = np.int_([1,2,4]) >>> y array([1, 2, 4]) >>> z = np.arange(3, dtype=np.uint8) >>> z array([0, 1, 2], dtype=uint8)
數組類型也可以由字符代碼指定,這主要是為了保留舊的包的向后兼容,如Numeric。一些文檔仍舊可能這樣寫,例如:
>>> np.array([1, 2, 3], dtype="f") array([ 1., 2., 3.], dtype=float32)
我們推薦用 dtype 對象來取代。
要轉換數組類型,使用 .astype() 方法(推薦),或者將類型自身用作函數,例如:
>>> z.astype(float) array([ 0., 1., 2.]) >>> np.int8(z) array([0, 1, 2], dtype=int8)
需要注意的是,上面我們使用Python的浮點對象作為 dtype。NumPy知道int是指np.int_,bool指np.bool_,float指np.float_,complex指np.complex_ 。其他數據類型在Python中沒有對應。
通過查看 dtype 屬性來確定數組的類型:
>>> z.dtype dtype("uint8")
dtype 對象還包含有關類型的信息,如它的位寬和字節順序。數據類型也可以間接用于類型的查詢屬性,例如檢查是否是整數:
>>> d = np.dtype(int) >>> d dtype("int32") >>> np.issubdtype(d, int) True >>> np.issubdtype(d, float) False數組標量
NumPy一般以數組標量返回數組元素(帶有相關dtype的標量)。數組標量不同于Python標量,但他們中的大部分可以互換使用(一個主要的例外是2.x之前的Python,其中整數數組標量不能作為列表和元組的下標)。也有一些例外,比如當代碼需要標量的一個非常特定的屬性,或檢查一個值是否是特定的Python標量時。一般來說,總是可以使用相應的Python類型函數(如int,float,complex,str,unicode),將數組標量顯式轉換為Python標量來解決問題。
使用數組標量的主要優點是,它們保留了數組的類型(Python可能沒有匹配的標量類型,如int16)。因此,使用數組標量確保了數組和標量之間具有相同的行為,無論值在不在數組中。NumPy標量也有許多和數組相同的方法。
擴展精度Python 的浮點數通常都是64位的,幾乎相當于 np.float64 。在一些不常見的情況下,更精確的浮點數可能更好。是否可以這樣做取決于硬件和開發環境:具體來說,x86 機器提供了80位精度的硬件浮點支持,雖然大多數 C 編譯器都以 long double 類型來提供這個功能,但 MSVC (標準的Windows版本)中 long double 和 double 一致。NumPy中可以通過 np.longdouble 來使用編譯器的 long double (復數為 np.clongdouble )。你可以通過 np.finfo(np.longdouble) 來了解你的 numpy 提供了什么。
NumPy 不提供比 C 的 long double 精度更高的 dtype;特別是128位 IEEE 四精度數據類型(Fortran 的 REAL*16)是不能用的。
為了高效的內存對齊,np.longdouble通常填充零位來存儲,共96位或128位。哪個更有效取決于硬件環境;通常在32位系統中,他們被填充到96位,而在64位系統,他們通常是填充到128位。np.longdouble 以系統默認的方式填充;而 np.float96 和 np.float128 為那些需要特定填充位的用戶提供。盡管名字不同,np.float96 和 np.float128都只提供和np.longdouble相同的精度,也就是說,大多數 x86 機器上面只有80位,標準Windows版本上只有64位。
注意,即使np.longdouble比Python的float精度更高,也很容易失去額外的精度,因為Python經常強行以float來傳值。例如,%格式化運算符要求其參數轉換成標準的Python類型,因此它不可能保留額外的精度,即使要求更多的小數位數。可以使用1 + np.finfo(np.longdouble).eps來測試你的代碼。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37845.html
摘要:包的核心是對象。但有個例外,包括對象數組的元素大小是不同的。序列大小和速度在科學計算中尤為重要。例如考慮兩個長度相同的列表中每個元素相乘的情況。此外,編碼所需的工作量隨數據維數的增加而增加。這些信息主要用于高級用戶。 譯者:飛龍 1.1 NumPy 是什么? 原文:What is NumPy? NumPy是Python中用于科學計算的基礎包。它是一個Python庫,提供多維數組對象,各...
目錄Numpy簡介Numpy操作集合1、不同維度數據的表示1.1 一維數據的表示1.2 二維數據的表示1.3 三維數據的表示2、 為什么要使用Numpy2.1、Numpy的ndarray具有廣播功能2.2 Numpy數組的性能比Python原生數據類型高3 ndarray的屬性和基本操作3.1 ndarray的基本屬性3.2 ndarray元素類型3.3 創建ndarray的方式3.4 ndarr...
摘要:張量的命名形式,為節點的名稱,表示當前張量來自來自節點的第幾個輸出。,要求的輸入對象是一個但是它的輸出是一個數組輸出其他基本概念常量變量占位符常量中使用常量很簡單,如,。返回的的類型返回的的形狀的名字布爾值,用于驗證值的形狀。 showImg(https://segmentfault.com/img/bVbvlKO?w=4938&h=1679);(代碼基于tensorflow 1.14...
摘要:在基本語法入門之后,就要準備選一個研究方向了。是自己比較感興趣的方向,可是,導師這邊的數據處理肯定不能由我做主了。真的挺愁人的還有幾個月就要進行春季實習招聘了,加油總結一下機器學習方面的資料吧。 在python基本語法入門之后,就要準備選一個研究方向了。Web是自己比較感興趣的方向,可是,導師這邊的數據處理肯定不能由我做主了。paper、peper、paper……真的挺愁人的 還有幾個...
閱讀 3801·2021-11-24 09:39
閱讀 1810·2021-11-02 14:41
閱讀 814·2019-08-30 15:53
閱讀 3480·2019-08-29 12:43
閱讀 1189·2019-08-29 12:31
閱讀 3087·2019-08-26 13:50
閱讀 795·2019-08-26 13:45
閱讀 986·2019-08-26 10:56