最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

《利用Python進(jìn)行數(shù)據(jù)分析·第2版》第4章 NumPy基礎(chǔ):數(shù)組和矢量計(jì)算

2018-05-04 08:00 作者:絕不原創(chuàng)的飛龍  | 我要投稿

NumPy(Numerical Python的簡稱)是Python數(shù)值計(jì)算最重要的基礎(chǔ)包。大多數(shù)提供科學(xué)計(jì)算的包都是用NumPy的數(shù)組作為構(gòu)建基礎(chǔ)。

NumPy的部分功能如下:

  • ndarray,一個(gè)具有矢量算術(shù)運(yùn)算和復(fù)雜廣播能力的快速且節(jié)省空間的多維數(shù)組。

  • 用于對(duì)整組數(shù)據(jù)進(jìn)行快速運(yùn)算的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)(無需編寫循環(huán))。

  • 用于讀寫磁盤數(shù)據(jù)的工具以及用于操作內(nèi)存映射文件的工具。

  • 線性代數(shù)、隨機(jī)數(shù)生成以及傅里葉變換功能。

  • 用于集成由C、C++、Fortran等語言編寫的代碼的A C API。

由于NumPy提供了一個(gè)簡單易用的C API,因此很容易將數(shù)據(jù)傳遞給由低級(jí)語言編寫的外部庫,外部庫也能以NumPy數(shù)組的形式將數(shù)據(jù)返回給Python。這個(gè)功能使Python成為一種包裝C/C++/Fortran歷史代碼庫的選擇,并使被包裝庫擁有一個(gè)動(dòng)態(tài)的、易用的接口。

NumPy本身并沒有提供多么高級(jí)的數(shù)據(jù)分析功能,理解NumPy數(shù)組以及面向數(shù)組的計(jì)算將有助于你更加高效地使用諸如pandas之類的工具。因?yàn)镹umPy是一個(gè)很大的題目,我會(huì)在附錄A中介紹更多NumPy高級(jí)功能,比如廣播。

對(duì)于大部分?jǐn)?shù)據(jù)分析應(yīng)用而言,我最關(guān)注的功能主要集中在:

  • 用于數(shù)據(jù)整理和清理、子集構(gòu)造和過濾、轉(zhuǎn)換等快速的矢量化數(shù)組運(yùn)算。

  • 常用的數(shù)組算法,如排序、唯一化、集合運(yùn)算等。

  • 高效的描述統(tǒng)計(jì)和數(shù)據(jù)聚合/摘要運(yùn)算。

  • 用于異構(gòu)數(shù)據(jù)集的合并/連接運(yùn)算的數(shù)據(jù)對(duì)齊和關(guān)系型數(shù)據(jù)運(yùn)算。

  • 將條件邏輯表述為數(shù)組表達(dá)式(而不是帶有if-elif-else分支的循環(huán))。

  • 數(shù)據(jù)的分組運(yùn)算(聚合、轉(zhuǎn)換、函數(shù)應(yīng)用等)。。

雖然NumPy提供了通用的數(shù)值數(shù)據(jù)處理的計(jì)算基礎(chǔ),但大多數(shù)讀者可能還是想將pandas作為統(tǒng)計(jì)和分析工作的基礎(chǔ),尤其是處理表格數(shù)據(jù)時(shí)。pandas還提供了一些NumPy所沒有的更加領(lǐng)域特定的功能,如時(shí)間序列處理等。

筆記:Python的面向數(shù)組計(jì)算可以追溯到1995年,Jim Hugunin創(chuàng)建了Numeric庫。接下來的10年,許多科學(xué)編程社區(qū)紛紛開始使用Python的數(shù)組編程,但是進(jìn)入21世紀(jì),庫的生態(tài)系統(tǒng)變得碎片化了。2005年,Travis Oliphant從Numeric和Numarray項(xiàng)目整了出了NumPy項(xiàng)目,進(jìn)而所有社區(qū)都集合到了這個(gè)框架下。

NumPy之于數(shù)值計(jì)算特別重要的原因之一,是因?yàn)樗梢愿咝幚泶髷?shù)組的數(shù)據(jù)。這是因?yàn)椋?/p>

  • NumPy是在一個(gè)連續(xù)的內(nèi)存塊中存儲(chǔ)數(shù)據(jù),獨(dú)立于其他Python內(nèi)置對(duì)象。NumPy的C語言編寫的算法庫可以操作內(nèi)存,而不必進(jìn)行類型檢查或其它前期工作。比起Python的內(nèi)置序列,NumPy數(shù)組使用的內(nèi)存更少。

  • NumPy可以在整個(gè)數(shù)組上執(zhí)行復(fù)雜的計(jì)算,而不需要Python的for循環(huán)。

要搞明白具體的性能差距,考察一個(gè)包含一百萬整數(shù)的數(shù)組,和一個(gè)等價(jià)的Python列表:

In [7]: import numpy as np 

In [8]: my_arr = np.arange(1000000

In [9]: my_list = list(range(1000000))

各個(gè)序列分別乘以2:

In [10]: %time for _ in range(10): my_arr2 = my_arr * 2

CPU times: user 20 ms, sys: 50 ms, total: 70 ms 

Wall time: 72.4 ms 

In [11]: %time for _ in range(10): my_list2 = [x * 2 for x in my_list] 

CPU times: user 760 ms, sys: 290 ms, total: 1.05

Wall time: 1.05 s

基于NumPy的算法要比純Python快10到100倍(甚至更快),并且使用的內(nèi)存更少。

閱讀全文:http://t.cn/RunX7DQ


《利用Python進(jìn)行數(shù)據(jù)分析·第2版》第4章 NumPy基礎(chǔ):數(shù)組和矢量計(jì)算的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
三明市| 桐城市| 靖州| 广宁县| 潍坊市| 沐川县| 平泉县| 婺源县| 岳池县| 醴陵市| 盖州市| 赤水市| 土默特右旗| 海丰县| 东安县| 房山区| 四川省| 五常市| 闵行区| 溧水县| 杭锦旗| 登封市| 万州区| 兰坪| 亳州市| 阿尔山市| 大冶市| 湄潭县| 尼玛县| 淳化县| 丰原市| 山东| 永年县| 嵊泗县| 句容市| 灵丘县| 曲阳县| 德惠市| 新巴尔虎左旗| 阳原县| 白山市|