numpy均匀分布_Python计算类库(Numpy)
生活随笔
收集整理的這篇文章主要介紹了
numpy均匀分布_Python计算类库(Numpy)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Python計(jì)算類庫(kù)(Numpy)
Python計(jì)算庫(kù)(Numpy)思維導(dǎo)圖
1. Numpy是什么?
NumPy(Numerical Python的縮寫)是一個(gè)開(kāi)源的Python科學(xué)計(jì)算庫(kù)。使用NumPy,就可以很自然地使用數(shù)組和矩陣。 NumPy包含很多實(shí)用的數(shù)學(xué)函數(shù),涵蓋線性代數(shù)運(yùn)算、傅里葉變換和隨機(jī)數(shù)生成等功能
這個(gè)庫(kù)的前身是1995年就開(kāi)始開(kāi)發(fā)的一個(gè)用于數(shù)組運(yùn)算的庫(kù)。經(jīng)過(guò)了長(zhǎng)時(shí)間的發(fā)展,基本上成了絕大部分Python科學(xué)計(jì)算的基礎(chǔ)包,當(dāng)然也包括所有提供Python接口的深度學(xué)習(xí)框架
2. 為什么使用Numpy?
a) 便捷:
- 對(duì)于同樣的數(shù)值計(jì)算任務(wù),使用NumPy要比直接編寫Python代碼便捷得多。這是因?yàn)镹umPy能夠直接對(duì)數(shù)組和矩陣進(jìn)行操作,可以省略很多循環(huán)語(yǔ)句,其眾多的數(shù)學(xué)函數(shù)也會(huì)讓編寫代碼的工作輕松許多
b) 性能:
- NumPy中數(shù)組的存儲(chǔ)效率和輸入輸出性能均遠(yuǎn)遠(yuǎn)優(yōu)于Python中等價(jià)的基本數(shù)據(jù)結(jié)構(gòu)(如嵌套的list容器)。其能夠提升的性能是與數(shù)組中元素的數(shù)目成比例的。對(duì)于大型數(shù)組的運(yùn)算,使用NumPy的確很有優(yōu)勢(shì)。對(duì)于TB級(jí)的大文件,NumPy使用內(nèi)存映射文件來(lái)處理,以達(dá)到最優(yōu)的數(shù)據(jù)讀寫性能
c) 高效:
- NumPy的大部分代碼都是用C語(yǔ)言寫成的,這使得NumPy比純Python代碼高效得多
注意:
- NumPy也有其不足之處,由于NumPy使用內(nèi)存映射文件以達(dá)到最優(yōu)的數(shù)據(jù)讀寫性能,而內(nèi)存的大小限制了其對(duì)TB級(jí)大文件的處理;此外,NumPy數(shù)組的通用性不及Python提供的list容器。因此,在科學(xué)計(jì)算之外的領(lǐng)域,NumPy的優(yōu)勢(shì)也就不那么明顯
3. Numpy的安裝:
(1)官網(wǎng)安裝:http://www.numpy.org/
(2)pip 安裝:pip install numpy
(3)LFD安裝,針對(duì)windows用戶:http://www.lfd.uci.edu/~gohlke/pythonlibs/
(4)Anaconda安裝(推薦),Anaconda里面集成了很多關(guān)于python科學(xué)計(jì)算的第三方庫(kù),主要是安裝方便。下載地址:https://www.anaconda.com/download/
4. numpy 基礎(chǔ):
NumPy的主要對(duì)象是同種元素的多維數(shù)組。這是一個(gè)所有的元素都是一種類型。在NumPy中維度(dimensions)叫做軸(axes),軸的個(gè)數(shù)叫做秩(rank)。NumPy的數(shù)組類被稱作 ndarray(矩陣也叫數(shù)組) 。通常被稱作數(shù)組。常用的ndarray對(duì)象屬性有:ndarray.ndim(數(shù)組軸的個(gè)數(shù),軸的個(gè)數(shù)被稱作秩),ndarray.shape(數(shù)組的維度。這是一個(gè)指示數(shù)組在每個(gè)維度上大小的整數(shù)元組。
Numpy的數(shù)據(jù)類型:
例如:一個(gè)n行m列的矩陣:
- .ndim
- .shape
- .size
- .dtype
Numpy內(nèi)置的特征碼:
- int8, int16, int32,int64 可以由字符串’i1’, ‘i2’,’i4’, ‘i8’代替,其余的以此類推
5. 創(chuàng)建數(shù)組并查看其屬性:
(1) 用np.array從python列表和元組創(chuàng)建數(shù)組:
- 例:
- 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
(2) 用np.arange().reshape()創(chuàng)建數(shù)組:
- 例:
- 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)
(3)用np.random.randint(最小值,最大值,個(gè)數(shù),類型).reshape(#,#)
- 左閉右開(kāi)
- 隨機(jī)整數(shù)
(4)用np.random.rand(#).reshape(#,#)
- 左閉右開(kāi)
- [0,1)均勻分布(小數(shù))
- 個(gè)
(5)用np.random.randn(#)
- 左閉右開(kāi)
- 標(biāo)準(zhǔn)正態(tài)分布
- 均值為0,方差為1
(6)用np.emty(#),reshape(#)
- 固定值#生成(無(wú)限趨近于零)
(7)用np.ones(#),reshape(#)
- 固定值1生成
- 個(gè)
(8)用np.zeros(),reshape(#)
- 固定值0生成
- 個(gè)
(6)用np.emty(),reshape(#)
- 固定值生成
6. 基本運(yùn)算:
array.sum()
- 所有值累加和
- array.sum(0)
- 每一列的累加和
- array.sum(1)
- 每一行的累加和
+
- array+array
-
- array-array
*
- np.dot(array,array)
T
- array.T
linalg.inv
- np.linalg.inv(array)
7. 常用函數(shù):
import numpy as np
array = np.random.randint(1,10,9).reshape(3,3) print(np.where(array>5,array,0))
8、索引、切片、迭代
索引:
- import numpy as np a = arange(10)**3 a[2] a[2:5] a[:6:2] = -1000 a[ : :-1] for i in a:
- 多維數(shù)組的索引
- b = np.arange(20).reshape(5,4) b[2,3] b[0:5, 1] b[ : ,1] b[1:3, : ]
當(dāng)少于軸數(shù)的索引被提供時(shí),確失的索引被認(rèn)為是整個(gè)切片
b[-1] #相當(dāng)于b[-1,:]
b[i] 中括號(hào)中的表達(dá)式被當(dāng)作 i 和一系列 : ,來(lái)代表剩下的軸。NumPy也允許你使用“點(diǎn)”像 b[i,...] 。
點(diǎn) (…)代表許多產(chǎn)生一個(gè)完整的索引元組必要的分號(hào)。如果x是
秩為5的數(shù)組(即它有5個(gè)軸),那么: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] # 等價(jià)于c[2][1] c[2,1,1] # 等價(jià)于c[2][1][1]
通過(guò)數(shù)組索引
d = np.arange(10)**2 e = np.array ([3, 5, 6])
切片(起始值,結(jié)束值,最后值):
- 實(shí)例:
- 取第一行所有值:
- array[0]
- 取第一列所有值:
- array[:,0]
- 取第一行所有值:
- 取第一行和第三行:
- array[0::2,]
- 取第二列和第四列:
- array[::,1::2]
- 取第一行和第三行:
- 取第一行和第三行的取第二列和第四列:
- array[0::2,1::2]
- 取第一行和第三行的取第二列和第四列:
迭代:
- for i in range(0,array.shape[0]): for j in range (0,array.shape[1]): print(array[i][j],end="t") print()
9. 形狀操作:
ravel()
- array.ravel()
vstack()
- np.vstack((array,array))
hstack()
- np.hstack((array,array))
stack()
- np.stack((array,array,axis=0))
split()
- np.split(array,#)
hsplit()
- np.hsplit(array,#)
vsplit()
- np.vsplit(array,#)
總結(jié)
以上是生活随笔為你收集整理的numpy均匀分布_Python计算类库(Numpy)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 地址总线是单向还是双向_三端双向交流开关
- 下一篇: python print放同一行_pyt