Python機(jī)器學(xué)習(xí)三大件之一numpy
機(jī)器學(xué)習(xí)三大件:numpy, pandas, matplotlib
Numpy(Numerical Python)是一個(gè)開源的Python科學(xué)計(jì)算庫,用于快速處理任意維度的數(shù)組。
Numpy支持常見的數(shù)組和矩陣操作。對于同樣的數(shù)值計(jì)算任務(wù),使用Numpy比直接使用Python要簡潔的多。
Numpy使用ndarray對象來處理多維數(shù)組,該對象是一個(gè)快速而靈活的大數(shù)據(jù)容器。
NumPy提供了一個(gè)N維數(shù)組類型ndarray
import numpy as npscore = np.array([[80, 89, 86, 67, 79],[78, 97, 89, 67, 81],[90, 94, 78, 67, 74],[91, 91, 90, 67, 69],[76, 87, 75, 67, 86],[70, 79, 84, 67, 84],[94, 92, 93, 67, 64],[86, 85, 83, 67, 80]])
score
array([[80, 89, 86, 67, 79],[78, 97, 89, 67, 81],[90, 94, 78, 67, 74],[91, 91, 90, 67, 69],[76, 87, 75, 67, 86],[70, 79, 84, 67, 84],[94, 92, 93, 67, 64],[86, 85, 83, 67, 80]])
Numpy專門針對ndarray的操作和運(yùn)算進(jìn)行了設(shè)計(jì),所以數(shù)組的存儲(chǔ)效率和輸入輸出性能遠(yuǎn)優(yōu)于Python中的嵌套列表,數(shù)組越大,Numpy的優(yōu)勢就越明顯。
從圖中我們可以看出ndarray在存儲(chǔ)數(shù)據(jù)的時(shí)候,數(shù)據(jù)與數(shù)據(jù)的地址都是連續(xù)的,這樣就給使得批量操作數(shù)組元素時(shí)速度更快。list ? 分離式存儲(chǔ),存儲(chǔ)內(nèi)容多樣化ndarray ? 一體式存儲(chǔ),存儲(chǔ)類型必須一樣ndarray支持并行化運(yùn)算(向量化運(yùn)算)ndarray底層是用C語言寫的,效率更高,釋放了GIL
二、基本操作# 生成0和1的數(shù)組ones = np.ones([4,8])ones
array([[1., 1., 1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1., 1., 1.]])
# 生成等間隔的數(shù)組np.linspace(0, 100, 11)
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.,100.])
#創(chuàng)建等差數(shù)組 — 指定步長np.arange(10, 50, 2)
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48])
三、正太分布 rand函數(shù)根據(jù)給定維度生成[0,1)之間的數(shù)據(jù),包含0,不包含1np.random.rand(4,2)
array([[ 0.02173903, 0.44376568],[ 0.25309942, 0.85259262],[ 0.56465709, 0.95135013],[ 0.14145746, 0.55389458]])
randn函數(shù)返回一個(gè)或一組樣本,具有標(biāo)準(zhǔn)正態(tài)分布np.random.randn(2,4)
array([[ 0.27795239, -2.57882503, 0.3817649 , 1.42367345],[-1.16724625, -0.22408299, 0.63006614, -0.41714538]])
randint返回隨機(jī)整數(shù),范圍區(qū)間為[low,high),包含low,不包含highnp.random.randint(1,5) # 返回1個(gè)[1,5)時(shí)間的隨機(jī)整數(shù)
4
生成均勻分布的隨機(jī)數(shù),舉例1:生成均值為1.75,標(biāo)準(zhǔn)差為1的正態(tài)分布數(shù)據(jù),100000000個(gè)x1 = np.random.normal(1.75, 1, 100000000)
array([2.90646763, 1.46737886, 2.21799024, …, 1.56047411, 1.87969135, 0.9028096 ])
均勻分布# 生成均勻分布的隨機(jī)數(shù)x2 = np.random.uniform(-1, 1, 100000000)
array([ 0.22411206, 0.31414671, 0.85655613, …, -0.92972446, 0.95985223, 0.23197723])
四、數(shù)組的索引、切片# 三維a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])# 返回結(jié)果array([[[ 1, 2, 3],[ 4, 5, 6]], [[12, 3, 34],[ 5, 6, 7]]])# 索引、切片a1[0, 0, 1] # 輸出: 2五、形狀修改
stock_change.reshape([5, 4]) #5*4stock_change.reshape([-1,10]) #2*10,-1: 表示通過待計(jì)算六、轉(zhuǎn)置
stock_change.T.shape七、類型轉(zhuǎn)換
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])arr.tostring()八、數(shù)組的去重
temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])>>> np.unique(temp)array([1, 2, 3, 4, 5, 6])
邏輯運(yùn)算直接進(jìn)行大于,小于的判斷:test_score > 60合適之后,可以直接進(jìn)行賦值:test_score[test_score > 60] = 1通用判斷函數(shù)np.all() np.all(score[0:2, :] > 60)np.any() np.any(score[0:2, :] > 80)統(tǒng)計(jì)運(yùn)算np.max()np.min()np.median()np.mean()np.std()np.var()np.argmax(axis=) — 最大元素對應(yīng)的下標(biāo)np.argmin(axis=) — 最小元素對應(yīng)的下標(biāo)
九、廣播機(jī)制 數(shù)組運(yùn)算,滿足廣播機(jī)制,就OK1.維度相等
2.shape(其中對應(yīng)的地方為1,也是可以的)
arr1 = np.array([[0],[1],[2],[3]])arr1.shape# (4, 1)arr2 = np.array([1,2,3])arr2.shape# (3,)arr1+arr2# 結(jié)果是:array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]])
到此這篇關(guān)于Python機(jī)器學(xué)習(xí)三大件之一numpy的文章就介紹到這了,更多相關(guān)python numpy內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. python web框架的總結(jié)2. Python如何進(jìn)行時(shí)間處理3. 詳解Python模塊化編程與裝飾器4. python使用ctypes庫調(diào)用DLL動(dòng)態(tài)鏈接庫5. html小技巧之td,div標(biāo)簽里內(nèi)容不換行6. 以PHP代碼為實(shí)例詳解RabbitMQ消息隊(duì)列中間件的6種模式7. python logging 重復(fù)寫日志問題解決辦法詳解8. Python中l(wèi)ogger日志模塊詳解9. python裝飾器三種裝飾模式的簡單分析10. Python實(shí)現(xiàn)迪杰斯特拉算法過程解析
