Chapter 4 Numpy基礎(chǔ)

ndarray簡介


????多維數(shù)組對象(ndarray)在運算上非常靈活揩瞪,同長度的數(shù)組之間運算為各對應(yīng)元素間的運算,而數(shù)組與標(biāo)量間的運算篓冲,則會把標(biāo)量應(yīng)用至數(shù)組內(nèi)的每個元素李破。

???? 一個ndarray 內(nèi)所有元素類型一致

ndarray創(chuàng)建


????np.array() 及np.asarray 可以接受格式各樣的數(shù)據(jù),列表字典數(shù)組或其它序列類型

????np.array()及np.asarray()間的區(qū)別在于纹因,當(dāng)傳入的數(shù)據(jù)本身為一個數(shù)組時np.asarray()是不會對其復(fù)制的喷屋。(暫時沒想明白asarray這種特性使用的實際場景)

????np.zero(), np.ones(), np.empty() 分別創(chuàng)建全0,全1瞭恰,全空的數(shù)組(空不是0)屯曹。此外還有np.ones_like()等用于以其它對象限定shape。

????np.arange() 與np.array(range()) 結(jié)果一致惊畏,但是range的步長為小數(shù)時會報錯恶耽。

ndarray數(shù)據(jù)類型


???? 這一部分感覺不需要了解太多,用一般的數(shù)據(jù)類型int, float, str, bool就可以颜启,python會幫你匹配好對應(yīng)格式偷俭。

????使用astype可以轉(zhuǎn)換dtype。(創(chuàng)建新的數(shù)組缰盏,不管dtype有沒有變涌萤,跟前文np.array是一樣的)

????當(dāng)數(shù)組本身為float類型時淹遵,使用astype轉(zhuǎn)換則小數(shù)部分會被去除。

? ??如果數(shù)組為str類型负溪,而表示的全是數(shù)字透揣,可用astype轉(zhuǎn)換為數(shù)值。(就是excel里文本類型單元格的轉(zhuǎn)換為數(shù)字功能)

ndarray基本索引及切片


? ? ndarray的切片可直接賦值一個標(biāo)量川抡,廣播到整個切片辐真,這是list無法做到的。

? ? 數(shù)組的切片是一個視圖崖堤,對其做的任何改變都會反映在原數(shù)組上侍咱,而list的切片則是副本,如果要對數(shù)組復(fù)制為副本密幔,則需使用copy()楔脯。

? ? 注意上例中以b[:] 來表示對b的切片選取,直接寫b = 2的話是直接重新定義變量b老玛。

????高維數(shù)組的索引切片:

? ? 簡單的理解淤年,高維數(shù)組的索引是從高維到低維選取的。

? ? 實際上a[1,2] 的選取是等價于 a[1][2]的蜡豹。

? ? 布爾值索引


? ? 之前提到的索引方式都是基于數(shù)據(jù)所在位置進(jìn)行選取麸粮,工作中遇到的很多條件篩選是基于判斷的,比如說大于100镜廉,或者說是否是17年內(nèi)的弄诲。這種時候需要用布爾值索引選取。

? ? 比如一組數(shù)中選取大于100的娇唯。

? ? 本質(zhì)是a > 100 本身產(chǎn)生了一組布爾值的數(shù)組齐遵,隨后a[a > 100]選取了True索引對應(yīng)的值。比如說我又另一組50個的數(shù)組b塔插,則可以選取這個a > 100的條件梗摇,去看看對應(yīng)的b的值是多少。

? ? 這里順便提一下想许,書上P93上的圖4-2伶授,其中shape那里有幾個shape是(3,)這樣表示的,可能會感到疑惑流纹,我這個shape明明是一維的呀糜烹。實際上這是因為shape是tuple,而tuple是不能接受(3)這種形式的,否則就是產(chǎn)生數(shù)字(list就沒有這種限制)漱凝。當(dāng)然疮蹦,你可以使用tuple([3]),這樣的話產(chǎn)生的結(jié)果就是(3,)茸炒。

? ? 書上94頁在否定這里寫的是負(fù)號表示條件否定愕乎,現(xiàn)在被波浪號替代了阵苇,記得用括號把條件圈起來,尤其是涉及& | 的時候務(wù)必看清楚妆毕。(and or 在布爾型數(shù)組中無效)

? ? 此處注意慎玖,通過布爾型選出的數(shù)據(jù),為數(shù)據(jù)副本笛粘。

花式索引


? ? 在一維上,花式索引實際上就是指可以不連續(xù)湿硝、無順序的取多個索引值薪前。

? ? 對于多維數(shù)組,花式索引為索引元素間一一對應(yīng)的選取关斜∈纠ǎ看文字可能比較難以理解,其實看代碼表現(xiàn)形式就很容易痢畜。

? ? 很容易理解垛膝,此處選取的即[1,2], [3,4], [5,6] 三個數(shù)。而如果想要1,3,5行和2,4,6行的交叉取出的矩形丁稀,則應(yīng)把行列分開選群鹩怠:

? ? 或者使用np.ix_(跟pandas中的ix相似)

? ? 花式索引的結(jié)果為副本。

數(shù)組轉(zhuǎn)置與軸對換


? ? 二維的轉(zhuǎn)置比較簡單线衫,很容易理解凿可。

? ? 對于多維數(shù)組的轉(zhuǎn)置,感覺書上寫的不是很清楚授账。其實就是把原有的軸重新排序枯跑,比如說一個三維數(shù)組,他的原有的軸就是(0,1,2), 轉(zhuǎn)置為(1,0,2)時白热, 即把原先索引為(2,1,3)的數(shù)敛助,轉(zhuǎn)移到(1,2,3)的位置上。而直接使用T屬性屋确,即為轉(zhuǎn)置為反向索引(0,1,2)轉(zhuǎn)置為(2,1,0)

? ? 看a.transpose((0, 2, 1)的輸出結(jié)果可以看到纳击,最高緯度不變,二三維做了個轉(zhuǎn)置乍恐。

? ? T即所有軸反向排列评疗。 ??

? ? ndarray 的swapaxes方法,接受一對軸編號茵烈,將這兩個軸互換百匆。

? ? 注意:所有的轉(zhuǎn)置操作都是返回一個源數(shù)據(jù)的視圖。

通用函數(shù)


? ? 通用函數(shù)就是應(yīng)用于整個數(shù)組內(nèi)的所有元素的函數(shù)呜投,這個跟人的思維習(xí)慣比較相符加匈,你寫代碼的時候肯定更愿意寫abs(array) 而不是 nd.array([abs(i) for i in array])

? ? 具體函數(shù)名稱不用多看存璃,根據(jù)需求在遇到的時候搜索下即可。

利用數(shù)組進(jìn)行數(shù)據(jù)處理


? ? 這里有個很方便的函數(shù):np.where雕拼,使用方式跟excel的if一致,很實用偎球。

? ? 布爾值在數(shù)學(xué)計算中會被強制轉(zhuǎn)換為0、1猫牡,所以可以通過這個特性直接給篩選值計數(shù)淌友。

? ? ndarray的排序和list一樣,可以通過sort方法就地排序。

? ? 若只想創(chuàng)建一個副本主籍,則需要使用函數(shù)np.sort

唯一化及其它集合邏輯


? ? 去重:unique

? ? 選取交集:intersect1d

? ? 選取并集:union1d

? ? 查看從屬關(guān)系(元素):in1d(x,y) ?x中的元素在y中是否包含的布爾數(shù)組颤绕。

? ? 選取集合差:setdiff1d(x, y) ?在x中奥务,不在y中的元素集合氯葬。

? ? 選取集合對稱差:setxor1d(x, y) 在一個集合,且不在另一集合的元素集合秽澳。

文件輸入輸出


? ? np.save保存單數(shù)組始花,np.savez保存多數(shù)組衙荐。save保存后綴默認(rèn)npy,savez默認(rèn)保存后綴npz溜族,savez保存的時候?qū)?shù)組類似于字典進(jìn)行保存煌抒。

? ? 用np.load讀取npz文件時厕倍,輸出結(jié)果為一段內(nèi)存代碼,需要通過索引調(diào)取的形式展示內(nèi)容讹弯。

線性代數(shù)


? ? ? ? 之前提過,shape相同的ndarray之間的加減乘除是元素級的组民,如果想要對矩陣進(jìn)行點積,則要使用dot函數(shù)臭胜。

隨機數(shù)


? ? ? ? np.random.seed()莫其,書上的說法是確定隨機數(shù)生成器的種子。舉個例子乱陡,我每次輸入np.random.randn(5),每次產(chǎn)生的數(shù)組是不一致的仪壮。而每次輸入np.random.seed(5);np.random.randn(5) 產(chǎn)生的結(jié)果會是一模一樣的烙心。但要注意淫茵,在每次產(chǎn)隨機數(shù)前都加上seed铆铆,否則除第一組隨機數(shù)外,后續(xù)的隨機數(shù)并不由seed指定丹喻。

? ? ? ? np.random.permutation薄货,接受一個序列或一個數(shù)字(數(shù)字其實默認(rèn)代表的np.arange(x)),對其重排碍论,不會影響原有序列谅猾。shuffle只能接受序列,就地隨機排列鳍悠。

????????np.random.rand產(chǎn)生均勻分布樣本值税娜,np.random.randint產(chǎn)生范圍內(nèi)整數(shù)隨機值,np.random.randn產(chǎn)生正態(tài)分布樣本值藏研。np.random.normal也產(chǎn)生正太分布敬矩,主要區(qū)別在于normal可調(diào)節(jié)scale,即正太分布那個峰的胖瘦蠢挡。

np.random.randn(5)實際上與np.random.normal(loc = 0, scale = 1,size = (1, 5)) 是一致的弧岳。np.random.uniform產(chǎn)生設(shè)定上下限的均勻分布樣本值。np,random.rand(5) 與 np.random.uniform(low = 0, high = 1, size = (1, 5))一致业踏。

隨機漫步


????????這個地方不難理解禽炬,照著書上敲就可以明白。書中xrange在python3里被整合到range去了堡称,還有書中random.randint(0, 1)不知道在python2中是否取值是[0,1]中的整數(shù)瞎抛,在python3中,取值是[0,1)却紧,這樣會導(dǎo)致照著書得到的結(jié)果是一條斜率為-1的直線桐臊,改成random,randint(0, 2)就好了。另外可以學(xué)習(xí)下這里if的用法晓殊,比較簡便一些断凶。

.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巫俺,隨后出現(xiàn)的幾起案子认烁,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件却嗡,死亡現(xiàn)場離奇詭異舶沛,居然都是意外死亡,警方通過查閱死者的電腦和手機窗价,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門如庭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撼港,你說我怎么就攤上這事坪它。” “怎么了帝牡?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵往毡,是天一觀的道長。 經(jīng)常有香客問我靶溜,道長开瞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任罩息,我火速辦了婚禮惩阶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扣汪。我一直安慰自己,他們只是感情好锨匆,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布崭别。 她就那樣靜靜地躺著,像睡著了一般恐锣。 火紅的嫁衣襯著肌膚如雪茅主。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天土榴,我揣著相機與錄音诀姚,去河邊找鬼。 笑死玷禽,一個胖子當(dāng)著我的面吹牛赫段,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矢赁,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼糯笙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撩银?” 一聲冷哼從身側(cè)響起给涕,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后够庙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恭应,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年耘眨,在試婚紗的時候發(fā)現(xiàn)自己被綠了昼榛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡毅桃,死狀恐怖褒纲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钥飞,我是刑警寧澤莺掠,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站读宙,受9級特大地震影響彻秆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜结闸,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一唇兑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桦锄,春花似錦扎附、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至图甜,卻和暖如春碍粥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黑毅。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工嚼摩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矿瘦。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓枕面,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匪凡。 傳聞我的和親對象是個殘疾皇子膊畴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

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