您好,登錄后才能下訂單哦!
這篇文章主要介紹“python中如何使用numpy庫”,在日常操作中,相信很多人在python中如何使用numpy庫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python中如何使用numpy庫”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
NumPy
(Numerical Python的縮寫)是一個開源的Python
科學(xué)計算庫。使用NumPy
,就可以很自然地使用數(shù)組和矩陣。 NumPy
包含很多實用的數(shù)學(xué)函數(shù),涵蓋線性代數(shù)運算、傅里葉變換和隨機數(shù)生成等功能。
這個庫的前身是1995年就開始開發(fā)的一個用于數(shù)組運算的庫。經(jīng)過了長時間的發(fā)展,基本上成了絕大部分Python
科學(xué)計算的基礎(chǔ)包,當(dāng)然也包括所有提供Python
接口的深度學(xué)習(xí)框架。
對于同樣的數(shù)值計算任務(wù),使用NumPy
要比直接編寫Python
代碼便捷得多。這是因為NumPy
能夠直接對數(shù)組和矩陣進(jìn)行操作,可以省略很多循環(huán)語句,其眾多的數(shù)學(xué)函數(shù)也會讓編寫代碼的工作輕松許多。
NumPy
中數(shù)組的存儲效率和輸入輸出性能均遠(yuǎn)遠(yuǎn)優(yōu)于Python
中等價的基本數(shù)據(jù)結(jié)構(gòu)(如嵌套的list容器)。其能夠提升的性能是與數(shù)組中元素的數(shù)目成比例的。對于大型數(shù)組的運算,使用NumPy
的確很有優(yōu)勢。對于TB
級的大文件,NumPy
使用內(nèi)存映射文件來處理,以達(dá)到最優(yōu)的數(shù)據(jù)讀寫性能。
NumPy
的大部分代碼都是用C語言
寫成的,這使得NumPy
比純Python
代碼高效得多。
當(dāng)然,NumPy
也有其不足之處,由于NumPy
使用內(nèi)存映射文件以達(dá)到最優(yōu)的數(shù)據(jù)讀寫性能,而內(nèi)存的大小限制了其對TB級大文件的處理;此外,NumPy
數(shù)組的通用性不及Python
提供的list
容器。因此,在科學(xué)計算之外的領(lǐng)域,NumPy
的優(yōu)勢也就不那么明顯。
官網(wǎng)安裝:http://www.numpy.org/。
pip 安裝:pip install numpy。
LFD安裝:針對windows用戶
Anaconda安裝(推薦):Anaconda里面集成了很多關(guān)于python科學(xué)計算的第三方庫,主要是安裝方便。
NumPy
的主要對象是同種元素的多維數(shù)組。這是一個所有的元素都是一種類型。在NumPy
中維度(dimensions)叫做軸(axes),軸的個數(shù)叫做秩(rank)。NumPy
的數(shù)組類被稱作 ndarray
(矩陣也叫數(shù)組 。通常被稱作數(shù)組。
常用的ndarray
對象屬性有:
ndarray.ndim
(數(shù)組軸的個數(shù),軸的個數(shù)被稱作秩),
ndarray.shape
(數(shù)組的維度。這是一個指示數(shù)組在每個維度上大小的整數(shù)元組。例如一個n行m列的矩陣,它的shape
屬性將是(2,3),這個元組的長度顯然是秩,即維度或者ndim
屬性),
ndarray.size
(數(shù)組元素的總個數(shù),等于shape
屬性中元組元素的乘積),
ndarray.dtype
(一個用來描述數(shù)組中元素類型的對象,可以通過創(chuàng)造或指定dtype
使用標(biāo)準(zhǔn)Python
類型。另外NumPy
提供它自己的數(shù)據(jù)類型)。
import numpy as np a = np.dtype(np.int_) # np.int64, np.float32 … print(a)
int8, int16, int32,int64 可以由字符串’i1’, ‘i2’,’i4’, ‘i8’代替,其余的以此類推。
import numpy as np a = np.dtype(‘i8’) # ’f8’, ‘i4’’c16’,’a30’(30個字符的字 # 符串), ‘>i4’… print (a)
可以指明數(shù)據(jù)類型在內(nèi)存中的字節(jié)序,’>’表示按大端的方式存儲,’<’表示按小端的方式存儲,’=’表示數(shù)據(jù)按硬件默認(rèn)方式存儲。大端或小端存儲只影響數(shù)據(jù)在底層內(nèi)存中存儲時字節(jié)的存儲順序,在我們實際使用python
進(jìn)行科學(xué)計算時,一般不需要考慮該存儲順序。
(推薦微課:python3基礎(chǔ)微課)
import numpy as np a = np.array([[1,2,3], [4, 5, 6]], dtype=int) print(a.shape) # a.ndim, a.size, a.dtype
import numpy as np a = np.array([(1,2,3), (4, 5, 6)], dtype=float) print(a.shape) # a.ndim, a.size, a.dtype
import numpy as np a = np.arange(10).reshape(2, 5) # 創(chuàng)建2行5列的二維數(shù)組, # 也可以創(chuàng)建三維數(shù)組, # a = np.arange(12).reshape(2,3,2) print(a)
判斷下列三維數(shù)組的shape
:
a = np.array([[[1,2,3], [4, 5, 6], [7, 8, 9]]]) b = np.array([[[1,2,3]], [[4, 5, 6]], [[7, 8, 9]]])
import numpy as np a = np.random.random(6) b = np.random.rand(6) c = np.random.randn(6) print(a-b) # print(a+b),print(a*c) … # 二維數(shù)組運算 d = np.random.random((2,3)) e = np.random.randn(2, 3) f = np.random.rand(2,3) print(d-e) # print(d+f),print(e*f) … print(np.dot(a,b)) #復(fù)習(xí)矩陣乘法 print(a.dot(b)) # Numpy 隨機數(shù)模塊np.random.random, np.random.randn, np.random.rand的比較 (1)rand 生成均勻分布的偽隨機數(shù)。分布在(0~1)之間 (2)randn 生成標(biāo)準(zhǔn)正態(tài)分布的偽隨機數(shù)(均值為0,方差為1)。
import numpy as np a = np.ones((2,3)) b = np.zeros((2,3)) a*=3 b+=a
import numpy as np a = np.arange(10) np.where()
import numpy as np a = arange(10)**3 a[2] a[2:5] a[:6:2] = -1000 a[ : :-1] for i in a: print i**(1/3.) # 多維數(shù)組的索引 b = np.arange(20).reshape(5,4) b[2,3] b[0:5, 1] b[ : ,1] b[1:3, : ] #當(dāng)少于軸數(shù)的索引被提供時,確失的索引被認(rèn)為是整個切片 b[-1] #相當(dāng)于b[-1,:] # b[i] 中括號中的表達(dá)式被當(dāng)作 i 和一系列 : ,來代表剩下的軸。NumPy也允許你使用“點”像 b[i,...] 。 #點 (…)代表許多產(chǎn)生一個完整的索引元組必要的分號。如果x是 #秩為5的數(shù)組(即它有5個軸),那么:x[1,2,…] 等同于 x[1,2,:,:,:],x[…,3] 等同于 x[:,:,:,:,3],x[4,…,5,:] 等同 x[4,:,:,5,:]. 三維數(shù)組的索引: c = np.arange(12).reshape(2,3,2) c[1] c[2,1] # 等價于c[2][1] c[2,1,1] # 等價于c[2][1][1] # 通過數(shù)組索引 d = np.arange(10)**2 e = np.array ([3, 5, 6]) d[e] = ? #練習(xí), 用同樣的方法在二維數(shù)組中操作。 # 通過布爾數(shù)組索引 f = np.arange(12).reshape(3, 4) g = f>4 print(g) f [g]
迭代多維數(shù)組是就第一個軸而言的:
h = np.arange(12).reshape(3,4) for i in h: print(i)
如果想對每個數(shù)組中元素進(jìn)行運算,我們可以使用flat屬性,該屬性是數(shù)組元素的一個迭代器:
for i in h.flat: print(i)
補充:flatten()
的用法:np.flatten()
返回一個折疊成一維的數(shù)組。但是該函數(shù)只能適用于numpy
對象,即array
或者mat
,普通的list
列表是不行的。
import numpy as np a = np.array([[1,2], [3, 4], [5, 6]]) a.flatten() b = np.mat([[1,2,3], [4, 5, 6]]) b.flatten() c = [[1,2,3], [4, 5, 6]] c.flatten() ?
想要list
達(dá)到同樣的效果可以使用列表表達(dá)式:
[y for x in a for y in x]
ravel()
,vstack()
,hstack()
,column_stack
,row_stack
, stack
, split
, hsplit
, vsplit
import numpy as np #增加維度 a = np.arange(5) a[:, np.newaxis] a[np.newaxis, :] np.tile([1,2], 2) #合并 a = np.arange(10).reshape(2,5) print(a.ravel()) print(a.resize(5,2)) b = np.arange(6).reshape(2,3) c = np.ones((2,3)) d = np.hstack((b,c)) # hstack:horizontal stack 左右合并 e = np.vstack((b,c)) # vstack: vertical stack 上下合并 f = np.column_stack((b,c)) g = np.row_stack((b,c)) h = np.stack((b, c), axis=1) # 按行合并 i = np.stack((b,c), axis=0) # 按列合并 j = np.concatenate ((b, c, c, b), axis=0) #多個合并 #分割 k = np.hsplit(i, 2) l = np.vsplit(i, 2) m = np.split(i, 2, axis=0) n = np.split(i, 2,axis=1) o = np.array_split(np.arange(10),3) #不等量分割
import numpy as np a = np.arange (4) b = a c = a d = b a[0]=10 a = ? b = ? c= ? d = ? b = a.copy() a [0] = 9 b = ?
廣播是一種強有力的機制,它讓Numpy
可以讓不同大小的矩陣在一起進(jìn)行數(shù)學(xué)計算。我們常常會有一個小的矩陣和一個大的矩陣,然后我們會需要用小的矩陣對大的矩陣做一些計算。
把一個向量加到矩陣的每一行:
import numpy as np a = np.array ([[1,2,3], [4,5,6], [7,8,9]]) b = np.array ([10,10,10]) c = np.tile(b, (4,1)) d = a + c #用廣播機制: c = a + b
對兩個數(shù)組使用廣播機制要遵守下列規(guī)則:
如果數(shù)組的秩不同,使用1來將秩較小的數(shù)組進(jìn)行擴展,直到兩個數(shù)組的尺寸的長度都一樣。
如果兩個數(shù)組在某個維度上的長度是一樣的,或者其中一個數(shù)組在該維度上長度為1,那么我們就說這兩個數(shù)組在該維度上是相容的。
如果兩個數(shù)組在所有維度上都是相容的,他們就能使用廣播。
如果兩個輸入數(shù)組的尺寸不同,那么注意其中較大的那個尺寸。因為廣播之后,兩個數(shù)組的尺寸將和那個較大的尺寸一樣。
在任何一個維度上,如果一個數(shù)組的長度為1,另一個數(shù)組長度大于1,那么在該維度上,就好像是對第一個數(shù)組進(jìn)行了復(fù)制。
到此,關(guān)于“python中如何使用numpy庫”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。