Numpy
Numpy 是 Python 的一個科學計算包,包含了多維數(shù)組以及多維數(shù)組的操作。
Numpy 的核心是 ndarray 對象,這個對象封裝了同質(zhì)數(shù)據(jù)類型的n維數(shù)組。起名 ndarray 的原因就是因為是 n-dimension-array 的簡寫。
ndaarray:只能有一種數(shù)據(jù)類型,而且每個元素占用內(nèi)存空間大小相同。
import numpy as np 加載numpy包
Numpy 常見的基本數(shù)據(jù)類型如下:
數(shù)據(jù)類型 | 描述 |
---|---|
bool_ | 布爾(True或False),存儲為一個字節(jié) |
int_ | 默認整數(shù)類型(與C long相同;通常為int64或int32) |
intc | 與C int(通常為int32或int64)相同 |
intp | 用于索引的整數(shù)(與C ssize_t相同;通常為int32或int64) |
int8 | 字節(jié)(-128到127) |
int16 | 整數(shù)(-32768到32767) |
int32 | 整數(shù)(-2147483648至2147483647) |
int64 | 整數(shù)(-9223372036854775808至9223372036854775807) |
uint8 | 無符號整數(shù)(0到255) |
uint16 | 無符號整數(shù)(0到65535) |
uint32 | 無符號整數(shù)(0至4294967295) |
uint64 | 無符號整數(shù)(0至18446744073709551615) |
float_ | float64的簡寫。 |
float16 | 半精度浮點:符號位,5位指數(shù),10位尾數(shù) |
float32 | 單精度浮點:符號位,8位指數(shù),23位尾數(shù) |
float64 | 雙精度浮點:符號位,11位指數(shù),52位尾數(shù) |
object | Python對象,放什么都可以 |
NumPy 要求數(shù)組必須包含同一類型的數(shù)據(jù)。如果類型不匹配,NumPy 將會向上轉(zhuǎn)換(包含范圍越大,在上層)
強制類型用dtype參數(shù):np.array([3.14, 4, 2, 4], dtype='int64')
類型轉(zhuǎn)換,請使用.astype()方法(首選)或類型本身作為函數(shù)。
ndarray 與 python 原生 array 有什么區(qū)別
NumPy 數(shù)組在創(chuàng)建時有固定的大小,不同于Python列表(可以動態(tài)增長)。更改ndarray的大小將創(chuàng)建一個新的數(shù)組并刪除原始數(shù)據(jù)。
NumPy 數(shù)組中的元素都需要具有相同的數(shù)據(jù)類型,因此在存儲器中將具有相同的大小。數(shù)組的元素如果也是數(shù)組(可以是 Python 的原生 array,也可以是 ndarray)的情況下,則構成了多維數(shù)組。
NumPy 數(shù)組便于對大量數(shù)據(jù)進行高級數(shù)學和其他類型的操作。通常,這樣的操作比使用Python的內(nèi)置序列可能更有效和更少的代碼執(zhí)行。
越來越多的科學和數(shù)學的基于Python的包使用NumPy數(shù)組,所以需要學會 Numpy 的使用。
Numpy 的矢量化(向量化)功能優(yōu)點:
矢量化代碼更簡潔易讀
更少的代碼行通常意味著更少的錯誤該代碼
更接近地類似于標準數(shù)學符號(使得更容易,通常,以正確地編碼數(shù)學構造)
矢量化導致更多的“Pythonic”代碼。如果沒有向量化,我們的代碼將會效率很低,難以讀取for循環(huán)。
創(chuàng)建常用的數(shù)組:
創(chuàng)建一個全0數(shù)組:zeros();np.zeros_like(a) #按照a的形狀,創(chuàng)建一個形狀一樣的0數(shù)組
創(chuàng)建全1數(shù)組:ones()
單位矩陣:eye()
對角矩陣:diag()
設定具體值:full()
設置空值和無窮大:np.nan;np.inf,有一點要尤其注意的是: np.nan, np.inf 都是浮點類型,結合ndarray中的數(shù)據(jù)類型必須是相同的, 也就是說數(shù)組中如何有一個數(shù)據(jù)是空值,那么所有的數(shù)據(jù)都只能是浮點型。
隨機數(shù)組:
np.random.randint(1, 10, (3, 6)) --隨機生成1到10的3行6列數(shù)組
正態(tài)分布隨機數(shù)
np.random.uniform() --均勻分布, 在這個區(qū)間范圍之內(nèi), 任一點出現(xiàn)概率相同
np.random.randn() --標準正態(tài)分布
np.random.normal(4, 2, (10, 3)) # 均值, 標準差, 形狀 --正態(tài)分布
np.random.standard_t(3, (3, 3)) --t分布
np.random.f(1, 2, (3, 3)) --F分布
np.random.chisquare(1, (3, 3)) --卡方分布
np.random.binomial(10, 0.5, 20) --二項分布
設置隨機數(shù)種子
np.random.seed(100)
np.random.randint(10, size=(3, 3))
創(chuàng)建一個線性序列的數(shù)組
arange([start,] stop[, step,]):特點: 可以設置開始位置,終止位置和步長,但產(chǎn)生數(shù)字的數(shù)量不方便控制
np.linspace(開始位置, 終止位置, 產(chǎn)生數(shù)量):特點: 可以設置開始位置和終止位置以及產(chǎn)生數(shù)量,但不方便控制步長
nddaray常用屬性
查看數(shù)據(jù)形狀:shape
查看維度:ndim
查看數(shù)組元素個數(shù):size
查看類型:dtype
副本和視圖
數(shù)組的變形
數(shù)組的變形也是一類非常有用的操作。數(shù)組變形最靈活的實現(xiàn)方式是通過 reshape() 函數(shù)來實現(xiàn)。
請注意,如果希望該方法可行,那么原始數(shù)組的大小必須和變形后數(shù)組 的大小一致。如果滿足這個條件,reshape 方法將會用到原始數(shù)組的一 個非副本視圖。
技巧:在使用 reshape 時,可以將其中的一個維度指定為 -1,Numpy 會自動計算出它的真實值
拉伸成一維數(shù)組(數(shù)組的平鋪):ravel()
轉(zhuǎn)置 交換行和列:.T
數(shù)組的拼接:concatenatetenate()
數(shù)據(jù)的分裂:
將一個數(shù)組分成幾個較小的數(shù)組
既然可以將多個數(shù)組進行對堆疊,自然也可以將一個數(shù)組拆分成多個小數(shù)組。
使用split,可以指定均勻切割成幾份,也可以指定沿著哪個位置進行切割, 還可以指定沿著哪個軸進行切割.
np.split(ary, indices_or_sections, axis=0)
廣播機制
Numpy 可以轉(zhuǎn)換這些形狀不同的數(shù)組,使它們都具有相同的大小,然后再對它們進行運算。
Numpy運算
常用函數(shù)
add(x1,x2 [,out]) | 按元素添加參數(shù),等效于 x1 + x2 |
subtract(x1,x2 [,out]) | 按元素方式減去參數(shù),等效于x1 - x2 |
multiply(x1,x2 [,out]) | 逐元素乘法參數(shù),等效于x1 * x2 |
divide(x1,x2 [,out]) | 逐元素除以參數(shù),等效于x1 / x2 |
exp(x [,out]) | 計算輸入數(shù)組中所有元素的指數(shù)。 |
exp2(x [,out]) | 對于輸入數(shù)組中的所有p,計算2 ** p。 |
log(x [,out]) | 自然對數(shù),逐元素。 |
log2(x [,out]) | x的基礎2對數(shù)。 |
log10(x [,out]) | 以元素為單位返回輸入數(shù)組的基數(shù)10的對數(shù)。 |
expm1(x [,out]) | 對數(shù)組中的所有元素計算exp(x) - 1 |
log1p(x [,out]) | 返回一個加自然對數(shù)的輸入數(shù)組,元素。 |
sqrt(x [,out]) | 按元素方式返回數(shù)組的正平方根。 |
square(x [,out]) | 返回輸入的元素平方。 |
sin(x [,out]) | 三角正弦。 |
cos(x [,out]) | 元素余弦。 |
tan(x [,out]) | 逐元素計算切線。 |
規(guī)約函數(shù)(統(tǒng)計運算)
ndarray.sum([axis,dtype,out,keepdims]) | 返回給定軸上的數(shù)組元素的總和。 |
ndarray.cumsum([axis,dtype,out]) | 返回沿給定軸的元素的累積和。 |
ndarray.mean([axis,dtype,out,keepdims]) | 返回沿給定軸的數(shù)組元素的平均值。 |
ndarray.var([axis,dtype,out,ddof,keepdims]) | 沿給定軸返回數(shù)組元素的方差。 |
ndarray.std([axis,dtype,out,ddof,keepdims]) | 返回給定軸上的數(shù)組元素的標準偏差。 |
ndarray.argmax([axis,out]) | 沿著給定軸的最大值的返回索引。 |
ndarray.min([axis,out,keepdims]) | 沿給定軸返回最小值。 |
ndarray.argmin([axis,out]) | 沿著給定軸的最小值的返回索引。 |








暫無數(shù)據(jù)