NumPy入門

qq:875880047

NumPy簡介

? 官網(wǎng)鏈接:http://www.numpy.org/

? NumPy是Python語言的一個擴(kuò)充程序庫孤紧。支持高級大量的維度數(shù)組與矩陣運(yùn)

算赃额,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。

? 作者介紹

? Jim Hugunin: http://www.linkedin.com/in/jimhugunin? Travis Oliphant: http://www.linkedin.com/in/teoliphant

基本功能

快速高效的多維數(shù)組對象ndarray

用于對數(shù)組執(zhí)行元素級計算以及直接對數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算的函數(shù)

用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具

線性代數(shù)運(yùn)算鞍匾、傅里葉變換蜂林,以及隨機(jī)數(shù)生成

用于將C傀广、C++、Fortran代碼集成到Python的工具

除了為Python提供快速的數(shù)組處理能力庭砍,NumPy在數(shù)據(jù)分析方面還有另外一

個主要作用,即作為在算法之間傳遞數(shù)據(jù)的容器混埠。

效率對比

? 三種數(shù)據(jù)結(jié)構(gòu):list / array / numpy.array? 三種方法求和:for / sum / numpy.sum

? 例子代碼:extra/perf_compare.py

NumPy的ndarray 創(chuàng)建ndarray? 數(shù)組創(chuàng)建函數(shù)

類型說明

array將輸入數(shù)據(jù)(列表怠缸、元組、數(shù)組或其它序列類型)轉(zhuǎn)換為ndarray钳宪。要么推斷出dtype揭北,

要么顯示指定dtype。默認(rèn)直接復(fù)制輸入數(shù)據(jù)使套。

asarray將輸入轉(zhuǎn)換為darray罐呼,如果輸入本身就是一個ndarray就不進(jìn)行復(fù)制。

arange類似于內(nèi)置的range侦高,但返回一個ndarray而不是列表嫉柴。

ones, ones_like根據(jù)指定形狀和dtype創(chuàng)建一個全1數(shù)組。ones_like以另一個數(shù)組為參數(shù)奉呛,并根據(jù)其形

狀和dtype創(chuàng)建一個全1數(shù)組计螺。

zeros, zeros_like類似于ones和ones_like,只不過產(chǎn)生的是全0數(shù)組而已瞧壮。

empty, empty_like創(chuàng)建數(shù)組登馒,只分配內(nèi)存空間但不填充任何值。

eye, identity創(chuàng)建一個正方的N * N單位矩陣

? 例子代碼:the_numpy_ndarray/creating_ndarray.py

NumPy的ndarray NumPy數(shù)據(jù)類型? NumPy數(shù)據(jù)類型 I

類型說明

int8, uint8 - i1, u1有/無符號的8位整型

int16, uint16 - i2, u2有/無符號的16位整型

int32, uint32 - i4, u4有/無符號的32位整型

int64, uint64 - i8, u8有/無符號的64位整型

float16 - f2半精度浮點(diǎn)數(shù)

float32 - f4 or f標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)咆槽,與C的float兼容陈轿。

float64 - f8 or d標(biāo)準(zhǔn)的雙精度浮點(diǎn)數(shù)。與C的double和Python的float兼容秦忿。

float128 - f16 or g擴(kuò)展精度浮點(diǎn)數(shù)

NumPy的ndarray NumPy數(shù)據(jù)類型? NumPy數(shù)據(jù)類型 II

類型說明

complex64/128/256 -

c8/16/32

分別用兩個32位麦射,64位或128位浮點(diǎn)數(shù)表示的復(fù)數(shù)。

bool - ?存儲True和False值的布爾類型

object - OPython對象類型

string_ - S固定長度的字符串類型灯谣。S10代表長度為10的字符串潜秋。

unicode_ - U固定長度的unicode類型

? 創(chuàng)建ndarray時指定dtype類型

? 使用astype顯示轉(zhuǎn)換類型

? 例子代碼:the_numpy_ndarray/creating_ndarray.py

NumPy的ndarray 數(shù)組和標(biāo)量之間的運(yùn)算

不用編寫循環(huán)即可對數(shù)據(jù)執(zhí)行批量運(yùn)算

大小相等的數(shù)組之間的任何算術(shù)運(yùn)算都會將運(yùn)算應(yīng)用到元素級

數(shù)組與標(biāo)量的算術(shù)運(yùn)算也會將那個標(biāo)量值傳播到各個元素

例子代碼:

the_numpy_ndarray/operations_between_arrays_and_scalars.py

NumPy的ndarray 基本的索引和切片

? 索引原理

? 切片原理

? 例子代碼: the_numpy_ndarray/basic_indexing_and_slicing.py

NumPy的ndarray 布爾型索引

? 布爾型數(shù)組的長度必須跟被索引的軸長度一致。

? 可以將布爾型數(shù)組跟切片胎许、整數(shù)(或整數(shù)序列)混合使用? 例子代碼: the_numpy_ndarray/boolean_indexing.py

NumPy的ndarray 花式索引

花式索引(Fancy indexing)是一個NumPy術(shù)語峻呛,它指的是利用整數(shù)數(shù)組進(jìn)

行索引。

一次傳入多個索引數(shù)組會有一點(diǎn)特別辜窑。它返回的是一個一維數(shù)組钩述,其中的元素

對應(yīng)各個索引元組。

例子代碼: the_numpy_ndarray/fancy_indexing.py

NumPy的ndarray 數(shù)組轉(zhuǎn)置和軸對換

? 一維/二維數(shù)組轉(zhuǎn)置

? 高維數(shù)組軸對換

? 例子代碼:

the_numpy_ndarray/transposing_arrays_and_swapping_axes.py

NumPy的ndarray 快速的元素級數(shù)組函數(shù)? 一元函數(shù) I

類型說明

abs, fabs計算整數(shù)穆碎、浮點(diǎn)數(shù)或復(fù)數(shù)的絕對值切距。對于非復(fù)數(shù)值,可以使用更快的fabs惨远。

sqrt計算各元素的平方根谜悟。相當(dāng)于arr ** 0.5

sqare計算各元素的平方。相當(dāng)于arr ** 2

exp計算各元素的e^x

log, log10, log2, log1p分別為自然對數(shù)北秽、底數(shù)為10的log葡幸、底數(shù)為2的log和log(1 + x)。

sign計算各元素的正負(fù)號:1(正數(shù))贺氓、0(零)蔚叨、-1(負(fù)數(shù))。

ceil計算各元素的ceiling值辙培,即大于等于該值的最小整數(shù)蔑水。

floor計算各元素的floor值,即小于等于該值的最小整數(shù)扬蕊。

NumPy的ndarray 快速的元素級數(shù)組函數(shù)? 一元函數(shù) II

類型說明

rint將各元素值四舍五入到最接近的整數(shù)搀别,保留dtype。

modf將數(shù)組的小數(shù)部分與整數(shù)部分以兩個獨(dú)立數(shù)組的形式返還尾抑。

isnan返回一個表示“哪些值是NaN(這不是一個數(shù)字)”的布爾型數(shù)組

isfinite, isinf分別返回一個表示“哪些元素是有限的(非inf歇父,非NaN)”或“哪些元素是

無窮的”的布爾型數(shù)組

cos, cosh, sin, sinh, tan, tanh普通型或雙曲型三角函數(shù)

arccos, arccosh, arcsin, arcsinh,

arctan, arctanh

反三角函數(shù)

logical_not計算各元素not x的真值。相當(dāng)于-arr再愈。

NumPy的ndarray 快速的元素級數(shù)組函數(shù)? 二元函數(shù) I

類型說明

add將數(shù)組中對應(yīng)的元素相加

subtract從第一個數(shù)組中減去第二個數(shù)組中的元素

multiply數(shù)組元素相乘

divide, floor_divide除法或向下取整除法

power對第一個數(shù)組中的元素A和第二個數(shù)組中對應(yīng)位置的元素B榜苫,計算A^B。

maximum, fmax元素級的最大值計算翎冲。fmax將忽略NaN垂睬。

minimum, fmin元素級的最小值計算。fmin將忽略NaN。

mod元素級的求模計算

NumPy的ndarray 快速的元素級數(shù)組函數(shù)? 二元函數(shù) II

類型說明

copysign將第二個數(shù)組中的符號復(fù)制給第一個數(shù)組中的值

greater, greater_equal, less,

less_equal,equal, not_equal

執(zhí)行元素級的比較涂圆,最終產(chǎn)生布爾型數(shù)組偿荷。

logical_and, logical_or,

logical_xor

執(zhí)行元素級的真值邏輯運(yùn)算,最終產(chǎn)生布爾型數(shù)組逻淌。

? 例子代碼: universal_functions.py

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

? NumPy數(shù)組使你可以將許多種數(shù)據(jù)處理任務(wù)表述為簡潔的數(shù)組表達(dá)式(否則需

要編寫循環(huán))。用數(shù)組表達(dá)式代替循環(huán)的做法疟暖,通常被稱為矢量化卡儒。

? 矢量化數(shù)組運(yùn)算要比等價的純Python方式快上一兩個數(shù)量級? 例子代碼:data_processing_using_arrays/intro.py

利用數(shù)組進(jìn)行數(shù)據(jù)處理 將條件邏輯表述為數(shù)組運(yùn)算

列表推導(dǎo)的局限性

? 純Python代碼,速度不夠快俐巴。? 無法應(yīng)用于高維數(shù)組

where和where的嵌套

例子代碼:

data_processing_using_arrays/expressing_conditional_logic_as_array_op

erations.py

利用數(shù)組進(jìn)行數(shù)據(jù)處理 數(shù)學(xué)和統(tǒng)計方法? 數(shù)學(xué)和統(tǒng)計方法

類型說明

sum對數(shù)組中全部或某軸向的元素求和骨望。零長度的數(shù)組的sum為0。

mean算術(shù)平均數(shù)欣舵。零長度的數(shù)組的mean為NaN擎鸠。

std, var分別為標(biāo)準(zhǔn)差和方差,自由度可調(diào)(默認(rèn)為n)缘圈。

min, max最大值和最小值

argmin分別為最大值和最小值的索引

cumsum所有元素的累計和

cumprod所有元素的累計積

利用數(shù)組進(jìn)行數(shù)據(jù)處理 數(shù)學(xué)和統(tǒng)計方法

標(biāo)準(zhǔn)差和方差的解釋

cumsum和cumprod的解釋

帶axis參數(shù)的統(tǒng)計函數(shù)

例子代碼:

data_processing_using_arrays/mathematical_and_statistical_methods.py

利用數(shù)組進(jìn)行數(shù)據(jù)處理 用于布爾型數(shù)組的方法

? sum對True值計數(shù)

? any和all測試布爾型數(shù)組劣光,對于非布爾型數(shù)組袜蚕,所有非0元素將會被當(dāng)做True。

? 例子代碼:

data_processing_using_arrays/methods_for_boolean_arrays.py

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

? 直接排序

? 指定軸排序

? 例子代碼:data_processing_using_arrays/sorting.py

利用數(shù)組進(jìn)行數(shù)據(jù)處理 去重以及其它集合運(yùn)算? 去重以及其它集合運(yùn)算

類型說明

unique(x)計算x中的唯一元素绢涡,并返回有序結(jié)果牲剃。

intersect1d(x, y)計算x和y中的公共元素,并返回有序結(jié)果雄可。

union1d(x, y)計算x和y的并集凿傅,并返回有序結(jié)果。

in1d(x, y)得到一個表述"x的元素是否包含于y"的布爾型數(shù)組

setdiff1d(x, y)集合的差数苫,即元素在x中且不在y中

setxor1d(x, y)集合的異或聪舒,即存在于一個數(shù)組中但不同時存在于兩個數(shù)組中的元素。

? 例子代碼: data_processing_using_arrays/unique_and_other_set_logic.py

數(shù)組文件的輸入輸出

? 將數(shù)組以二進(jìn)制格式保存到磁盤

? 存取文本文件

? 例子代碼

? file_input_and_output_with_arrays/saving_and_loading_text_files.py

? file_input_and_output_with_arrays/storing_arrays_on_disk_in_binary_format.py

線性代數(shù)

? 常用的numpy.linalg函數(shù) I

類型說明

diag以一維數(shù)組的形式返回方陣的對角線(或非對角線元素)虐急,獲將一維數(shù)組轉(zhuǎn)換

為方陣(非對角線元素為0)箱残。

dot矩陣乘法

trace計算對角線元素的和

det計算矩陣行列式

eig計算方陣的特征值和特征向量

inv計算方陣的逆

線性代數(shù)

? 常用的numpy.linalg函數(shù) II

類型說明

pinv計算矩陣的Moore-Penrose偽逆

qr計算QR分解

svd計算奇異值分解

solve解線性方程Ax = b,其中A為一個方陣戏仓。

lstsq計算Ax = b的最小二乘解

? 例子代碼: linear_algebra.py

隨機(jī)數(shù)生成

? 部分numpy.random函數(shù) I

類型說明

seed確定隨機(jī)數(shù)生成器的種子

permutation返回一個序列的隨機(jī)排列或返回一個隨機(jī)排列的返回

shuffle對一個序列就地隨機(jī)亂序

rand產(chǎn)生均勻分布的樣本值

randint從給定的上下限范圍內(nèi)隨機(jī)選取整數(shù)

randn產(chǎn)生正態(tài)分布(平均值為0疚宇,標(biāo)準(zhǔn)差為1)

binomial產(chǎn)生二項分布的樣本值

隨機(jī)數(shù)生成

? 部分numpy.random函數(shù) II

類型說明

normal產(chǎn)生正態(tài)(高斯)分布的樣本值

beta產(chǎn)生Beta分布的樣本值

chisquare產(chǎn)生卡方分布的樣本值

gamma產(chǎn)Gamma分布的樣本值

uniform產(chǎn)生在[0, 1]中均勻分布的樣本值

? 例子代碼: random_number_generation.py

高級應(yīng)用 數(shù)組重塑

? reshape重塑數(shù)組

? -1自動推導(dǎo)維度大小

? 例子代碼:advanced_array_manipulation/reshaping_arrays.py

高級應(yīng)用 數(shù)組的合并和拆分? 數(shù)組連接函數(shù)

類型說明

concatenate最一般化的連接,沿一條軸連接一組數(shù)組

vstack, row_stack以面向行的方式對數(shù)組進(jìn)行堆疊(沿軸0)

hstack,以面向行的方式對數(shù)組進(jìn)行堆疊(沿軸1)

column_stack類似于hstack赏殃,但是會先將一維數(shù)組轉(zhuǎn)換為二維列向量敷待。

dstack以面向“深度”的方式對數(shù)組進(jìn)行堆疊(沿軸2)

split沿指定軸在指定的位置拆分?jǐn)?shù)組

hsplit, vsplit, dsplitsplit的便捷化函數(shù),分別沿著軸0仁热、軸1和軸2進(jìn)行拆分榜揖。

高級應(yīng)用 數(shù)組的合并和拆分

? _r對象

? _c對象

? 例子代碼:

advanced_array_manipulation/concatenating_and_splitting_arrays.py

高級應(yīng)用 元素的重復(fù)操作

? _tile

? _repeat

? 例子代碼:advanced_array_manipulation/repeating_elements.py

高級應(yīng)用 花式索引的等價函數(shù)

? take

? put

? 例子代碼:advanced_array_manipulation/fancy_indexing_equivalents.py

例題分析 距離矩陣計算

給定m × n階矩陣X,滿足X = [x1, x2, ... xn]抗蠢,這里第i列向量是m維向量举哟。

求n × n矩陣,使得Dij = ||xi - xj||2

例題分析 距離矩陣計算

? 方法1:標(biāo)準(zhǔn)方法計算Dij

? D[i, j] = numpy.linalg.norm(X[:, i], X[:, j) ** 2

? 方法2:利用dot計算Dij

? d=X[:,i]-X[:,j]

? D[i, j] = numpy.dot(d, d)

例題分析 距離矩陣計算

? 方法3:減少dot調(diào)用次數(shù)

Dij = (xi - xj)T(xi - xj) = xiTxi - 2xiTxj + xjTxj

G = numpy.dot(X.T, X)? Dij =Gii -2Gij +Gjj

例題分析 距離矩陣計算

? 方法4:利用重復(fù)操作替代外部循環(huán)

在方法3的基礎(chǔ)上迅矛,將D表達(dá)為H + K - 2G

Hij =Gii,Kij =Gjj

H = numpy.title(np.diag(G), (n, 1))

K=HT

D=H+HT-2G

? 例子代碼:extra/dist_matrix.py


有想學(xué)習(xí)python或 人工智能妨猩,數(shù)據(jù)分析,算法以及機(jī)器學(xué)習(xí)的請聯(lián)系我秽褒,qq:875880047?

?著作權(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)容