2-Numpy 初學(xué)

NumPy

  1. python list和Numpy的list
In [10]: L3 = [True, "2", 3.0, 4]
In [11]: [type(item) for item in L3]
Out[11]: [bool, str, float, int]

python這種靈活性是要付出一定的代價(jià):要允許這些靈活的類型稠项,列表中的每個(gè)項(xiàng)目都必須包含自己的類型信息,引用計(jì)數(shù)和其他信息-也就是說粥谬,每個(gè)項(xiàng)目都是一個(gè)完整的Python對(duì)象宙地。在所有變量都是同一類型的特殊情況下送漠,許多信息都是多余的:將數(shù)據(jù)存儲(chǔ)在固定類型的數(shù)組中會(huì)更加有效搂蜓。下圖說明了動(dòng)態(tài)類型列表和固定類型(NumPy樣式)數(shù)組之間的區(qū)別:


圖片.png

從上面實(shí)現(xiàn)可以看到狼荞,數(shù)組本質(zhì)上包含一個(gè)指向一個(gè)連續(xù)數(shù)據(jù)塊的指針。另一方面帮碰,Python列表包含一個(gè)指向一組指針的指針相味,每個(gè)指針都指向一個(gè)完整的Python對(duì)象,例如我們之前看到的Python整數(shù)殉挽。同樣丰涉,python列表的優(yōu)點(diǎn)是靈活性:由于每個(gè)列表元素都是包含數(shù)據(jù)和類型信息的完整結(jié)構(gòu),因此可以用任何所需類型的數(shù)據(jù)填充列表斯碌。固定類型的NumPy樣式的數(shù)組缺乏這種靈活性一死,但是在存儲(chǔ)和處理數(shù)據(jù)方面效率更高。

Python提供了幾種不同的選項(xiàng)來將數(shù)據(jù)存儲(chǔ)在高效的固定類型數(shù)據(jù)緩沖區(qū)中傻唾。內(nèi)置的數(shù)組模塊(自Python 3.3起可用)可用于創(chuàng)建統(tǒng)一類型的密集數(shù)組:

In [12]: 
    ...: import array
    ...: L = list(range(10))
    ...: A = array.array('i', L)
    ...: A
    ...: 
    ...: 
Out[12]: array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

這里的i表示數(shù)組類型是integer

ython的數(shù)組對(duì)象提供了基于數(shù)組的數(shù)據(jù)的有效存儲(chǔ)投慈,但是NumPy包的ndarray對(duì)象更加有用,NumPy對(duì)該數(shù)據(jù)進(jìn)行了有效的操作冠骄。我們將在后面的部分中探討這些操作伪煤。下面,我們將演示創(chuàng)建NumPy數(shù)組的幾種方法凛辣。

In [14]: import numpy as np
In [15]: np.array([1,3,5,9])
Out[15]: array([1, 3, 5, 9])

與Python列表不同的是抱既,NumPy限于所有包含相同類型的數(shù)組。如果類型不匹配扁誓,則NumPy將在可能的情況下向上轉(zhuǎn)換(此處防泵,向上轉(zhuǎn)換為浮點(diǎn)型整數(shù))甚至?xí)D(zhuǎn)換Unicode類型如下:


In [16]: np.array([1,3,5,'3'])
Out[16]: array(['1', '3', '5', '3'], dtype='<U11')

In [17]: np.array([3.14, 4, 2, 3])
Out[17]: array([3.14, 4.  , 2.  , 3.  ])
# 指定類型
In [18]: np.array([1, 2, 3, 4], dtype='float32')
Out[18]: array([1., 2., 3., 4.], dtype=float32)

另外numpy的array還可以創(chuàng)建多維數(shù)組

In [19]: np.array([range(i,i+4) for i in [1,2,3]])
Out[19]: 
array([[1, 2, 3, 4],
       [2, 3, 4, 5],
       [3, 4, 5, 6]])

特別是對(duì)于較大的數(shù)組,使用內(nèi)置在NumPy中使用常規(guī)從頭開始創(chuàng)建數(shù)組會(huì)更有效率跋理。下面幾個(gè)例子說明

In [20]: # 長(zhǎng)度為10择克,默認(rèn)填充0的int類型數(shù)組
    ...: np.zeros(10, dtype=int)
Out[20]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
#創(chuàng)建默認(rèn)為1 的3*5 float類型的數(shù)組
In [21]: np.ones((3,5),dtype=float)
Out[21]: 
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])
In [22]: # Create a 3x5 array 指定使用 3.14填充
    ...: np.full((3, 5), 3.14)
Out[22]: 
array([[3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14]])
# 創(chuàng)建從1到20步長(zhǎng)2的數(shù)組
In [24]: np.arange(1,10,2)
Out[24]: array([1, 3, 5, 7, 9])

In [26]: #從0到1的長(zhǎng)度,取間隔相同的四個(gè)點(diǎn)
    ...: np.linspace(0, 1, 4)
Out[26]: array([0.        , 0.33333333, 0.66666667, 1.        ])

In [29]: # Create a 3x3 array of uniformly distributed
    ...: # random values between 0 and 1
    ...: np.random.random((3, 3))
Out[29]: 
array([[0.42978944, 0.54364465, 0.54672853],
       [0.51082736, 0.97954524, 0.80516577],
       [0.50711922, 0.71589174, 0.85489927]])
In [31]: # 0-10 3*3 的隨機(jī)整數(shù)
    ...: np.random.randint(0, 10, (3, 3))
Out[31]: 
array([[2, 4, 6],
       [5, 4, 6],
       [6, 9, 7]])

In [35]: #返回一個(gè)2維數(shù)組前普,對(duì)角線上1肚邢,其他位置為零。
    ...: np.eye(2, dtype=int)
Out[35]: 
array([[1, 0],
       [0, 1]])

  1. NumPy 的標(biāo)準(zhǔn)類型

NumPy數(shù)組包含單個(gè)類型的值拭卿。因?yàn)镹umPy是用C內(nèi)置的骡湖,所以C,F(xiàn)ortran和其他相關(guān)語言的用戶會(huì)熟悉這些類型峻厚。

在創(chuàng)建NumPy 數(shù)據(jù)可以指定類型

In [39]: np.zeros(3,dtype='int8')
Out[39]: array([0, 0, 0], dtype=int8)

或者用numpy指定

In [40]: np.zeros(3,dtype=np.int8)
Out[40]: array([0, 0, 0], dtype=int8)

具體類型可參考:

Data type   Description
bool_   Boolean (True or False) stored as a byte
int_    Default integer type (same as C long; normally either int64 or int32)
intc    Identical to C int (normally int32 or int64)
intp    Integer used for indexing (same as C ssize_t; normally either int32 or int64)
int8    Byte (-128 to 127)
int16   Integer (-32768 to 32767)
int32   Integer (-2147483648 to 2147483647)
int64   Integer (-9223372036854775808 to 9223372036854775807)
uint8   Unsigned integer (0 to 255)
uint16  Unsigned integer (0 to 65535)
uint32  Unsigned integer (0 to 4294967295)
uint64  Unsigned integer (0 to 18446744073709551615)
float_  Shorthand for float64.
float16     Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
float32     Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
float64     Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
complex_    Shorthand for complex128.
complex64   Complex number, represented by two 32-bit floats
complex128  Complex number, represented by two 64-bit floats

更新github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末响蕴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惠桃,更是在濱河造成了極大的恐慌浦夷,老刑警劉巖辖试,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異劈狐,居然都是意外死亡罐孝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門肥缔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莲兢,“玉大人,你說我怎么就攤上這事续膳「耐В” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵坟岔,是天一觀的道長(zhǎng)谒兄。 經(jīng)常有香客問我,道長(zhǎng)社付,這世上最難降的妖魔是什么舵变? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮瘦穆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赊豌。我一直安慰自己扛或,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布碘饼。 她就那樣靜靜地躺著熙兔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艾恼。 梳的紋絲不亂的頭發(fā)上住涉,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音钠绍,去河邊找鬼舆声。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柳爽,可吹牛的內(nèi)容都是我干的媳握。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼磷脯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蛾找!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赵誓,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤打毛,失蹤者是張志新(化名)和其女友劉穎柿赊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻枉,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碰声,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了展辞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奥邮。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罗珍,靈堂內(nèi)的尸體忽然破棺而出洽腺,到底是詐尸還是另有隱情,我是刑警寧澤覆旱,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布蘸朋,位于F島的核電站,受9級(jí)特大地震影響扣唱,放射性物質(zhì)發(fā)生泄漏藕坯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一噪沙、第九天 我趴在偏房一處隱蔽的房頂上張望炼彪。 院中可真熱鬧,春花似錦正歼、人聲如沸辐马。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喜爷。三九已至,卻和暖如春萄唇,著一層夾襖步出監(jiān)牢的瞬間檩帐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工另萤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湃密,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓四敞,卻偏偏與公主長(zhǎng)得像唁盏,于是被迫代替她去往敵國(guó)和親颜懊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

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