《利用Python進(jìn)行數(shù)據(jù)分析》 附錄 A.9 性能技巧

附錄A 高階Numpy


A.9 性能技巧

利用NumPy從代碼中獲得良好性能通常很簡單牵寺,因?yàn)閿?shù)組操作通常會取代相對緩慢的純Python循環(huán)攀涵。以下列表簡要總結(jié)了一些需要注意的事項(xiàng):

· 將Python循環(huán)和條件邏輯轉(zhuǎn)換為數(shù)組操作和布爾數(shù)組操作

· 盡可能使用廣播

· 使用數(shù)組視圖(切片)來避免復(fù)制數(shù)據(jù)

· 使用ufunc和ufunc方法

如果在用盡NumPy提供的功能之后仍然無法獲得所需的性能,請考慮在C厨埋、Fortran或Cython中編寫代碼。我在自己工作中經(jīng)常會使用Cython進(jìn)行一些微小開發(fā),這是一種獲得近乎C語言性能的方式久又。


A.9.1 連續(xù)內(nèi)存的重要性

?????? 盡管本主題的完整內(nèi)容超出了本書的范圍,但在某些應(yīng)用中效五,數(shù)組的內(nèi)存布局會顯著影響計算速度地消。這種情況是基于CPU的緩存層次結(jié)構(gòu)相關(guān)的性能差異。訪問連續(xù)內(nèi)存塊的操作(例如畏妖,將C順序數(shù)組的行相加)通常是最快的脉执,因?yàn)榇鎯ζ髯酉到y(tǒng)會將適當(dāng)?shù)拇鎯ζ鲏K緩沖到超快的L1或L2 CPU緩存中。此外戒劫,NumPy的C代碼庫中的某些代碼路徑已進(jìn)行優(yōu)化半夷,在連續(xù)內(nèi)存的情況下可以避免對通用跨步內(nèi)存的訪問。

?????? 如果說數(shù)組的內(nèi)存布局是連續(xù)的迅细,就意味著這些元素按照它們在Fortran順序(列方向)或C順序(行方向)排序中出現(xiàn)在數(shù)組中的次序存儲在內(nèi)存中巫橄。默認(rèn)情況下,NumPy數(shù)組創(chuàng)建為C順序連續(xù)或只是簡單連續(xù)茵典。因此湘换,一個列方向的數(shù)組,例如C順序數(shù)組的轉(zhuǎn)置數(shù)組,可以稱為是Fotran順序連續(xù)的彩倚。這些屬性都是可以通過ndarray的flags屬性來檢查的(見圖A-1)

圖A-1:ndarray的flags屬性

?????? 在這個例子中筹我,對這些數(shù)組的行及逆行加和,在理論上arr_c是比arr_f更快署恍,這是因?yàn)閍rr_c的行在內(nèi)存中是連續(xù)的崎溃。這里我使用IPython中的%timeit進(jìn)行檢查(見圖A-2)

圖A-2:使用IPython中的%timeit進(jìn)行檢查

?????? 當(dāng)你想從NumPy中擠出更多的性能時,往往需要投入一些努力盯质。如果你的數(shù)組沒有所需的內(nèi)存順序袁串,則可以使用copy并傳遞’C’或’F'(見圖A-3)

圖A-3:傳遞內(nèi)存順序、在數(shù)組上構(gòu)建視圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呼巷,一起剝皮案震驚了整個濱河市囱修,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌王悍,老刑警劉巖破镰,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異压储,居然都是意外死亡鲜漩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門集惋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孕似,“玉大人,你說我怎么就攤上這事刮刑『砑溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵雷绢,是天一觀的道長泛烙。 經(jīng)常有香客問我,道長翘紊,這世上最難降的妖魔是什么蔽氨? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮帆疟,結(jié)果婚禮上孵滞,老公的妹妹穿的比我還像新娘。我一直安慰自己鸯匹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布泄伪。 她就那樣靜靜地躺著殴蓬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上染厅,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天痘绎,我揣著相機(jī)與錄音,去河邊找鬼肖粮。 笑死孤页,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涩馆。 我是一名探鬼主播行施,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魂那!你這毒婦竟也來了蛾号?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涯雅,失蹤者是張志新(化名)和其女友劉穎鲜结,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體活逆,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡精刷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔗候。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怒允。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琴庵,靈堂內(nèi)的尸體忽然破棺而出误算,到底是詐尸還是另有隱情,我是刑警寧澤迷殿,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布儿礼,位于F島的核電站,受9級特大地震影響庆寺,放射性物質(zhì)發(fā)生泄漏蚊夫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一懦尝、第九天 我趴在偏房一處隱蔽的房頂上張望知纷。 院中可真熱鬧,春花似錦陵霉、人聲如沸琅轧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乍桂。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睹酌,已是汗流浹背权谁。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憋沿,地道東北人旺芽。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像辐啄,于是被迫代替她去往敵國和親采章。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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