Numpy 中文用戶指南 3.1 數(shù)據(jù)類型

原文:Data types

譯者:飛龍

?

另見

數(shù)據(jù)類型對(duì)象

數(shù)組類型和類型之間的轉(zhuǎn)換

NumPy支持的數(shù)值類型比Python更多君旦。這一節(jié)會(huì)講述所有可用的類型,以及如何改變數(shù)組的數(shù)據(jù)類型红碑。

數(shù)據(jù)類型 描述
bool_ 以字節(jié)存儲(chǔ)的布爾值(True 或 False)
int_ 默認(rèn)的整數(shù)類型(和 C 的 long 一樣,是 int64 或者 int32)
intc 和 C 的 int 相同(一般為 int64 或 int32)
intp 用于下標(biāo)的整數(shù)(和 C 的 ssize_t 相同,一般為int64 或者 int32)
int8 字節(jié)(-128 到 127)
int16 整數(shù)(-32768 到 32767)
int32 整數(shù)(-2147483648 到 2147483647)
int64 整數(shù)(-9223372036854775808 到 9223372036854775807)
uint8 無符號(hào)整數(shù)(0 到 255)
uint16 無符號(hào)整數(shù)(0 到 65535)
uint32 無符號(hào)整數(shù)(0 到 4294967295)
uint64 無符號(hào)整數(shù)(0 到 18446744073709551615)
float_ float64 的簡(jiǎn)寫
float16 半精度浮點(diǎn):1位符號(hào)进泼,5位指數(shù)惕稻,10位尾數(shù)
float32 單精度浮點(diǎn):1位符號(hào)竖共,8位指數(shù),23位尾數(shù)
float64 雙精度浮點(diǎn):1位符號(hào)俺祠,11位指數(shù)公给,52位尾數(shù)
complex_ complex128 的簡(jiǎn)寫
complex64 由兩個(gè)32位浮點(diǎn)(實(shí)部和虛部)組成的復(fù)數(shù)
complex128 由兩個(gè)64位浮點(diǎn)(實(shí)部和虛部)組成的復(fù)數(shù)

此外,Intel平臺(tái)相關(guān)的C整數(shù)類型 short蜘渣、long淌铐,long long 和它們的無符號(hào)版本是有定義的。

NumPy數(shù)值類型是dtype對(duì)象的實(shí)例蔫缸,每個(gè)都有獨(dú)特的特點(diǎn)腿准。一旦你導(dǎo)入了NumPy:

>>> import numpy as np

這些 dtype 都可以通過 np.bool_np.float32 以及其它的形式訪問拾碌。

更高級(jí)的類型不在表中給出吐葱,請(qǐng)見結(jié)構(gòu)化數(shù)組一節(jié)街望。

有5種基本的數(shù)值類型:布爾(bool),整數(shù)(int)弟跑,無符號(hào)整數(shù)(uint)灾前,浮點(diǎn)(float)和復(fù)數(shù)。其中的數(shù)字表示類型所占的位數(shù)(即需要多少位代表內(nèi)存中的一個(gè)值)窖认。有些類型豫柬,如intintp,依賴于平臺(tái)(例如32位和64位機(jī))有不同的位數(shù)扑浸。在與低級(jí)別的代碼(如C或Fortran)交互和在原始內(nèi)存中尋址時(shí)應(yīng)該考慮到這些烧给。

數(shù)據(jù)類型可以用做函數(shù),來將Python類型轉(zhuǎn)換為數(shù)組標(biāo)量(詳細(xì)解釋請(qǐng)見數(shù)組標(biāo)量一節(jié))喝噪,或者將Python的數(shù)值序列轉(zhuǎn)換為同類型的NumPy數(shù)組础嫡,或者作為參數(shù)傳入接受dtype的關(guān)鍵詞的NumPy函數(shù)或方法中,例如:

>>> 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)

數(shù)組類型也可以由字符代碼指定酝惧,這主要是為了保留舊的包的向后兼容榴鼎,如Numeric。一些文檔仍舊可能這樣寫晚唇,例如:

>>> np.array([1, 2, 3], dtype='f')
array([ 1.,  2.,  3.], dtype=float32)

我們推薦用 dtype 對(duì)象來取代巫财。

要轉(zhuǎn)換數(shù)組類型,使用 .astype() 方法(推薦)哩陕,或者將類型自身用作函數(shù)平项,例如:

>>> z.astype(float)                 
array([  0.,  1.,  2.])
>>> np.int8(z)
array([0, 1, 2], dtype=int8)

需要注意的是,上面我們使用Python的浮點(diǎn)對(duì)象作為 dtype悍及。NumPy知道int是指np.int_闽瓢,boolnp.bool_floatnp.float_心赶,complexnp.complex_扣讼。其他數(shù)據(jù)類型在Python中沒有對(duì)應(yīng)。

通過查看 dtype 屬性來確定數(shù)組的類型:

>>> z.dtype
dtype('uint8')

dtype 對(duì)象還包含有關(guān)類型的信息缨叫,如它的位寬和字節(jié)順序椭符。數(shù)據(jù)類型也可以間接用于類型的查詢屬性,例如檢查是否是整數(shù):

>>> d = np.dtype(int)
>>> d
dtype('int32')

>>> np.issubdtype(d, int)
True

>>> np.issubdtype(d, float)
False

數(shù)組標(biāo)量

NumPy一般以數(shù)組標(biāo)量返回?cái)?shù)組元素(帶有相關(guān)dtype的標(biāo)量)弯汰。數(shù)組標(biāo)量不同于Python標(biāo)量艰山,但他們中的大部分可以互換使用(一個(gè)主要的例外是2.x之前的Python欺冀,其中整數(shù)數(shù)組標(biāo)量不能作為列表和元組的下標(biāo))芥玉。也有一些例外,比如當(dāng)代碼需要標(biāo)量的一個(gè)非常特定的屬性媒怯,或檢查一個(gè)值是否是特定的Python標(biāo)量時(shí)。一般來說纵装,總是可以使用相應(yīng)的Python類型函數(shù)(如int征讲,floatcomplex橡娄,str诗箍,unicode),將數(shù)組標(biāo)量顯式轉(zhuǎn)換為Python標(biāo)量來解決問題挽唉。

使用數(shù)組標(biāo)量的主要優(yōu)點(diǎn)是滤祖,它們保留了數(shù)組的類型(Python可能沒有匹配的標(biāo)量類型,如int16)瓶籽。因此匠童,使用數(shù)組標(biāo)量確保了數(shù)組和標(biāo)量之間具有相同的行為,無論值在不在數(shù)組中塑顺。NumPy標(biāo)量也有許多和數(shù)組相同的方法汤求。

擴(kuò)展精度

Python 的浮點(diǎn)數(shù)通常都是64位的,幾乎相當(dāng)于 np.float64 严拒。在一些不常見的情況下扬绪,更精確的浮點(diǎn)數(shù)可能更好。是否可以這樣做取決于硬件和開發(fā)環(huán)境:具體來說裤唠,x86 機(jī)器提供了80位精度的硬件浮點(diǎn)支持挤牛,雖然大多數(shù) C 編譯器都以 long double 類型來提供這個(gè)功能,但 MSVC (標(biāo)準(zhǔn)的Windows版本)中 long doubledouble 一致种蘸。NumPy中可以通過 np.longdouble 來使用編譯器的 long double (復(fù)數(shù)為 np.clongdouble )赊颠。你可以通過 np.finfo(np.longdouble) 來了解你的 numpy 提供了什么。

NumPy 不提供比 C 的 long double 精度更高的 dtype劈彪;特別是128位 IEEE 四精度數(shù)據(jù)類型(Fortran 的 REAL*16)是不能用的。

為了高效的內(nèi)存對(duì)齊顶猜,np.longdouble通常填充零位來存儲(chǔ)沧奴,共96位或128位。哪個(gè)更有效取決于硬件環(huán)境长窄;通常在32位系統(tǒng)中滔吠,他們被填充到96位,而在64位系統(tǒng)挠日,他們通常是填充到128位疮绷。np.longdouble 以系統(tǒng)默認(rèn)的方式填充;而 np.float96np.float128 為那些需要特定填充位的用戶提供嚣潜。盡管名字不同冬骚,np.float96np.float128都只提供和np.longdouble相同的精度,也就是說,大多數(shù) x86 機(jī)器上面只有80位只冻,標(biāo)準(zhǔn)Windows版本上只有64位庇麦。

注意,即使np.longdouble比Python的float精度更高喜德,也很容易失去額外的精度山橄,因?yàn)镻ython經(jīng)常強(qiáng)行以float來傳值。例如舍悯,%格式化運(yùn)算符要求其參數(shù)轉(zhuǎn)換成標(biāo)準(zhǔn)的Python類型航棱,因此它不可能保留額外的精度,即使要求更多的小數(shù)位數(shù)萌衬∫迹可以使用1 + np.finfo(np.longdouble).eps來測(cè)試你的代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奄薇,一起剝皮案震驚了整個(gè)濱河市驳阎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馁蒂,老刑警劉巖呵晚,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異沫屡,居然都是意外死亡饵隙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門沮脖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來金矛,“玉大人,你說我怎么就攤上這事勺届∈豢。” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵免姿,是天一觀的道長(zhǎng)饼酿。 經(jīng)常有香客問我,道長(zhǎng)胚膊,這世上最難降的妖魔是什么故俐? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮紊婉,結(jié)果婚禮上药版,老公的妹妹穿的比我還像新娘。我一直安慰自己喻犁,他們只是感情好槽片,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布何缓。 她就那樣靜靜地躺著,像睡著了一般筐乳。 火紅的嫁衣襯著肌膚如雪歌殃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天蝙云,我揣著相機(jī)與錄音氓皱,去河邊找鬼。 笑死勃刨,一個(gè)胖子當(dāng)著我的面吹牛波材,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播身隐,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼廷区,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了贾铝?” 一聲冷哼從身側(cè)響起隙轻,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垢揩,沒想到半個(gè)月后玖绿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叁巨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年斑匪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锋勺。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚀瘸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庶橱,到底是詐尸還是另有隱情贮勃,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布苏章,位于F島的核電站衙猪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏布近。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一丝格、第九天 我趴在偏房一處隱蔽的房頂上張望撑瞧。 院中可真熱鬧,春花似錦显蝌、人聲如沸预伺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酬诀。三九已至脏嚷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞒御,已是汗流浹背父叙。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肴裙,地道東北人趾唱。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜻懦,于是被迫代替她去往敵國和親甜癞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容