引言
要想學的更好,還是要看官方網站
創建數組
通過列表
import numpy as np
a=np.array([1,2,3,4],dtype=np.float64)
dtype 函數是為了調整numpy數組數據類型
- object :列表、元組等。
- dtype :數據類型。如果未給出,則類型為被保存對象所需的最小類型。
- copy :布爾類型,默認 True,表示復制對象。
- order :順序。 subok :布爾類型,表示子類是否被傳遞。
- ndmin :生成的數組應具有的最小維數。
特殊方法
arange-指定首尾和步長
除了直接使用 array 方法創建 ndarray ,在 NumPy 中還有一些方法可以創建一些有規律性的多維 數。首先,我們來看一看 arange() 。 arange() 的功能是在給定區間內創建一系列均勻間隔的值。方 法如下:
numpy.arange(start, stop, step, dtype=None)
注意:起始位置是左閉右開區間
linspace-指定首尾和數目
創建數值有規律的數組。 linspace 用於在指定的區間內返回間隔均勻的值。其方法如下:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- start :序列的起始值。
- stop :序列的結束值。
- num :生成的樣本數。默認值為50。
- endpoint :布爾值,如果為真,則最后一個樣本包含在序列內。
- retstep :布爾值,如果為真,返回間距。
- dtype :數組的類型。
ones方法
numpy.ones用於快速創建數值全部為1的多維數組
numpy.ones 用於快速創建數值全部為 1 的多維數組。其方法如下:
numpy.ones(shape, dtype=None, order='C')
其中:
- shape :用於指定數組形狀,例如(1, 2)或 3。
- dtype :數據類型。
- order : {'C','F'} ,按行或列方式儲存數組。
zeros方法創建
zeros 方法和上面的 ones 方法非常相似,不同的地方在於,這里全部填充為 0 。 zeros 方法 和 ones 是一致的。
eye方法創建
numpy.eye 用於創建一個二維數組,其特點是 k 對角線上的值為 1 ,其余值全部為 0 。方法如 下:
numpy.eye(N, M=None, k=0, dtype=<type 'float'>)
其中:
- N :輸出數組的行數。
- M :輸出數組的列數。
- k :對角線索引:0(默認)是指主對角線,正值是指上對角線,負值是指下對角線。
從已知數據文件創建
- 創建 frombuffer(buffer) :將緩沖區轉換為 1 維數組。
- fromfile(file,dtype,count,sep) :從文本或二進制文件中構建多維數組。
- fromfunction(function,shape) :通過函數返回值來創建多維數組。
- fromiter(iterable,dtype,count) :從可迭代對象創建 1 維數組。
- fromstring(string,dtype,count,sep) :從字符串中創建 1 維數組
對數組的操作
數組的格式改變
b=a.astype(int)
數組的轉置
ndarray.T 用於數組的轉置,與 .transpose() 相同
a.T
transpose 類似於矩陣的轉置,它可以將 2 維數組的橫軸和縱軸交換。其方法如下:
numpy.transpose(a, axes=None)
其中:
- a :數組。
- axis :該值默認為 none ,表示轉置。如果有值,那么則按照值替換軸。
對於此函數的解釋:
在高二維的矩陣運算中轉置可能導致維度混亂,用參數二可以對維度進行調整
正常轉置
此時是直接把維度調過來了
然而,加上參數,可以對維度的排列進行調整
[1, 0, 2]指的是原來的第二維到了第一的位置,第一維到了第二的位置,第三維不變
重設數組形狀
reshape
可以在不改變數組數據的同時,改變數組的形狀。其中, numpy.reshape()
等效於 ndarray.reshape()
。 reshape 方法非常簡單:
numpy.reshape(a, newshape)
其中,a 表示原數組, newshape 用於指定新的形狀(整數或者元組)。
resize 用法相似:
resize(a,new_shape)
:對數組尺寸進行重新設定。
reshape 在改變形狀時,不會影響原數組, 相當於對原數組做了一份拷貝。而 resize 則是對原數組執行操作。
數組展開
ravel
的目的是將任意形狀的數組扁平化,變為 1 維數組。 ravel
方法如下:
numpy.ravel(a, order='C')
其中,a 表示需要處理的數組。 order
表示變換時的讀取順序,默認是按照行依次讀取,當 order='F'
時,可以按列依次讀取排序。
軸移動
moveaxis
可以將數組的軸移動到新的位置。其方法如下:
numpy.moveaxis(a, source, destination)
a
:數組。source
:要移動的軸的原始位置。destination
:要移動的軸的目標位置。
1,0
就是意味着將數組的第二維移動到第一維的位置
軸交換
和 moveaxis
不同的是, swapaxes
可以用來交換數組的軸。其方法如下:
numpy.swapaxes(a, axis1, axis2)
a
:數組。axis1
:需要交換的軸 1 位置。axis2
:需要與軸 1 交換位置的軸 1 位置。
數組連接
concatenate
可以將多個數組沿指定軸連接在一起。其方法為:
numpy.concatenate((a1, a2, ...), axis=0)
其中:
- (a1, a2, ...) :需要連接的數組。
- axis :指定連接軸。
數組堆疊
stack(arrays,axis)
:沿着新軸連接數組的序列。column_stack()
:將 1 維數組作為列堆疊到 2 維數組中。hstack()
:按水平方向堆疊數組。vstack()
:按垂直方向堆疊數組。dstack()
:按深度方向堆疊數組。
橫着堆疊
數組刪除行或列
首先是 delete 刪除:
- delete(arr,obj,axis) :沿特定軸刪除數組中的子數組。
數組插入行或列
insert
插入,用法和 delete 很相似,只是需要在第三個參數位置設置需要插入的數組對象:
insert(arr,obj,values,axis)
:依據索引在特定軸之前插入值。
append
插入
append
的用法也非常簡單。只需要設置好需要附加的值和軸位置就好了。它其實相當於只能在末 尾插入的 insert
,所以少了一個指定索引的參數。
append(arr,values,axis)
:將值附加到數組的末尾,並返回 1 維數組。
數組的拆分
split
及與之相似的一系列方法主要是用於數組的拆分,列舉如下,ary指的是待操作的數組
split(ary,indices_or_sections,axis)
:將數組拆分為多個子數組。dsplit(ary,indices_or_sections)
:按深度方向將數組拆分成多個子數組。hsplit(ary,indices_or_sections)
:按水平方向將數組拆分成多個子數組。vsplit(ary,indices_or_sections)
:按垂直方向將數組拆分成多個子數組。
-
ary
ary的類型為ndarray(n維數組),表示待分割的原始數組 -
indices_or_sections
indices_or_sections的類型為int或者一維數組,表示一個索引,也就是切的位置所在。indices_or_sections的值如果是一個整數的話,就用這個數平均分割原數組。
- indices_or_sections的值如果是一個數組的話,就以數組中的數字為索引切開.
數組信息獲取
輸出數據類型
ndarray.dtype
用來輸出數組包含元素的數據類型。
a.dtype
輸出形狀/大小
ndarray.ndim
用來輸出數組維度。
ndarray.shape
用來輸出數組形狀。
ndarray.size
用來輸出數組中的總包含元素數。
輸出實部/虛部
ndarray.imag
用來輸出數組包含元素的虛部。
ndarray.real
用來輸出數組包含元素的實部。
a.imaga.real
Numpy隨機數
生成[0,1]隨機數
numpy.random.rand(d0, d1, ..., dn)
方法的作用為:
指定一個數組,並使用 [0, 1) 區間 隨機數據填充,這些數據均勻分布。 如果傳入的數是一個,則生成一個一維數組 如果傳入的數是兩個,則生成一個二維數組
randn
方法與 rand
用法相同,不同的是 randn
服從正態分布
生成左閉右開區間內的隨機整數
randint(low, high, size, dtype)
方法將會生成 [low, high) 的隨機整數。注意這是一個 半開半閉區間。
np.random.randint(2, 5, (2,5))
在數組中隨機抽取
import numpy as np# 參數意思分別 是從a 中以概率P,隨機選擇3個, p沒有指定的時候相當於是一致的分布a1 = np.random.choice(a=5, size=3, replace=False, p=None)print(a1)# 非一致的分布,會以多少的概率提出來 p表示的即為頻率a2 = np.random.choice(a=5, size=3, replace=False, p=[0.2, 0.1, 0.3, 0.4, 0.0])print(a2)# replacement 代表的意思是抽樣之后還放不放回去,如果是False的話,那么出來的三個數都不一樣
滿足概率密度的隨機數
除了上面介紹的 6 種隨機數生成方法,NumPy 還提供了大量的滿足特定概率密度分布的樣本生成方 法。它們的使用方法和上面非常相似,列舉如下:
- numpy.random.beta(a,b,size) :從 Beta 分布中生成隨機數。
- numpy.random.binomial(n, p, size) :從二項分布中生成隨機數。
- numpy.random.chisquare(df,size) :從卡方分布中生成隨機數。
- numpy.random.dirichlet(alpha,size) :從 Dirichlet 分布中生成隨機數。
- numpy.random.exponential(scale,size) :從指數分布中生成隨機數。
- numpy.random.f(dfnum,dfden,size) :從 F 分布中生成隨機數。
- numpy.random.gamma(shape,scale,size) :從 Gamma 分布中生成隨機數。
- numpy.random.geometric(p,size) :從幾何分布中生成隨機數。
- numpy.random.gumbel(loc,scale,size) :從 Gumbel 分布中生成隨機數。
- numpy.random.hypergeometric(ngood, nbad, nsample, size) :從超幾何分布中生 成隨機數。
- numpy.random.laplace(loc,scale,size) :從拉普拉斯雙指數分布中生成隨機數。
- numpy.random.logistic(loc,scale,size) :從邏輯分布中生成隨機數。
- numpy.random.lognormal(mean,sigma,size) :從對數正態分布中生成隨機數。
- numpy.random.logseries(p,size) :從對數系列分布中生成隨機數。
- numpy.random.multinomial(n,pvals,size) :從多項分布中生成隨機數。
- numpy.random.multivariate_normal(mean, cov, size) :從多變量正態分布繪制隨機 樣本。
- numpy.random.negative_binomial(n, p, size) :從負二項分布中生成隨機數。
- numpy.random.noncentral_chisquare(df,nonc,size) :從非中心卡方分布中生成隨機 數。
- numpy.random.noncentral_f(dfnum, dfden, nonc, size) :從非中心 F 分布中抽取樣本。
- numpy.random.normal(loc,scale,size) :從正態分布繪制隨機樣本。
- numpy.random.pareto(a,size) :從具有指定形狀的 Pareto II 或 Lomax 分布中生成隨機 數。
- numpy.random.poisson(lam,size) :從泊松分布中生成隨機數。
- numpy.random.power(a,size) :從具有正指數 a-1 的功率分布中在 0,1 中生成隨機數。
- numpy.random.rayleigh(scale,size) :從瑞利分布中生成隨機數。
- numpy.random.standard_cauchy(size) :從標准 Cauchy 分布中生成隨機數。
- numpy.random.standard_exponential(size) :從標准指數分布中生成隨機數。
- numpy.random.standard_gamma(shape,size) :從標准 Gamma 分布中生成隨機數。
- numpy.random.standard_normal(size) :從標准正態分布中生成隨機數。
- numpy.random.standard_t(df,size) :從具有 df 自由度的標准學生 t 分布中生成隨機 數。
- numpy.random.triangular(left,mode,right,size) :從三角分布中生成隨機數。
- numpy.random.uniform(low,high,size) :從均勻分布中生成隨機數。
- numpy.random.vonmises(mu,kappa,size) :從 von Mises 分布中生成隨機數。
- numpy.random.wald(mean,scale,size) :從 Wald 或反高斯分布中生成隨機數。
- numpy.random.weibull(a,size) :從威布爾分布中生成隨機數。
- numpy.random.zipf(a,size) :從 Zipf 分布中生成隨機數。
numpy函數計算
外部計算
三角運算
- numpy.sin(x) :三角正弦。
- numpy.cos(x) :三角余弦。
- numpy.tan(x) :三角正切。
- numpy.arcsin(x) :三角反正弦。
- numpy.arccos(x) :三角反余弦。
- numpy.arctan(x) :三角反正切。
- numpy.hypot(x1,x2) :直角三角形求斜邊。
- numpy.degrees(x) :弧度轉換為度。
- numpy.radians(x) :度轉換為弧度。
- numpy.deg2rad(x) :度轉換為弧度。
- numpy.rad2deg(x) :弧度轉換為度。
- numpy.sinh(x) :雙曲正弦。
- numpy.cosh(x) :雙曲余弦。
- numpy.tanh(x) :雙曲正切。
- numpy.arcsinh(x) :反雙曲正弦。
- numpy.arccosh(x) :反雙曲余弦。
- numpy.arctanh(x) :反雙曲正切。 指對數運算
指對數計算
-
numpy.exp(x) :計算輸入數組中所有元素的指數。
-
numpy.log(x) :計算自然對數。
-
numpy.log10(x) :計算常用對數。
-
numpy.log2(x) :計算二進制對數。
內部計算
- numpy.prod(a, axis, dtype, keepdims) :返回指定軸上的數組元素的乘積。
- numpy.sum(a, axis, dtype, keepdims) :返回指定軸上的數組元素的總和。
- numpy.nanprod(a, axis, dtype, keepdims) :返回指定軸上的數組元素的乘積, 將 NaN 視作 1。
- numpy.nansum(a, axis, dtype, keepdims) :返回指定軸上的數組元素的總和, 將 NaN 視 作 0。
- numpy.cumprod(a, axis, dtype) :返回沿給定軸的元素的累積乘積。 numpy.cumsum(a, axis, dtype) :返回沿給定軸的元素的累積總和。
- numpy.nancumprod(a, axis, dtype) :返回沿給定軸的元素的累積乘積, 將 NaN 視作 1。
- numpy.nancumsum(a, axis, dtype) :返回沿給定軸的元素的累積總和, 將 NaN 視作 0。
- numpy.diff(a, n, axis) :計算沿指定軸的第 n 個離散差分。
- numpy.ediff1d(ary, to_end, to_begin) :數組的連續元素之間的差異。
- numpy.gradient(f) :返回 N 維數組的梯度。
- numpy.cross(a, b, axisa, axisb, axisc, axis) :返回兩個(數組)向量的叉積。
- numpy.trapz(y, x, dx, axis) :使用復合梯形規則沿給定軸積分。
相互計算
- numpy.add(x1, x2) :對應元素相加。
- numpy.reciprocal(x) :求倒數 1/x。
- numpy.negative(x) :求對應負數。
- numpy.multiply(x1, x2) :求解乘法。
- numpy.divide(x1, x2) :相除 x1/x2。
- numpy.power(x1, x2) :類似於 x1^x2。
- numpy.subtract(x1, x2) :減法。
- numpy.fmod(x1, x2) :返回除法的元素余項。
- numpy.mod(x1, x2) :返回余項。
- numpy.modf(x1) :返回數組的小數和整數部分。
- numpy.remainder(x1, x2) :返回除法余數。
- numpy.dot(a, b) :求解兩個數組的點積。
- numpy.vdot(a, b) :求解兩個向量的點積。
- numpy.inner(a, b) :求解兩個數組的內積。
- numpy.outer(a, b) :求解兩個向量的外積。
- numpy.matmul(a, b) :求解兩個數組的矩陣乘積。
- numpy.tensordot(a, b) :求解張量點積。
- numpy.kron(a, b) :計算 Kronecker 乘積。
線性代數矩陣計算
-
numpy.linalg.cholesky(a) :Cholesky 分解。
-
numpy.linalg.qr(a ,mode) :計算矩陣的 QR 因式分解。
-
numpy.linalg.svd(a ,full_matrices,compute_uv) :奇異值分解。
-
numpy.linalg.eig(a) :計算正方形數組的特征值和右特征向量。
-
numpy.linalg.eigh(a, UPLO) :返回 Hermitian 或對稱矩陣的特征值和特征向量。
-
numpy.linalg.eigvals(a) :計算矩陣的特征值。
-
numpy.linalg.eigvalsh(a, UPLO) :計算 Hermitian 或真實對稱矩陣的特征值。
-
numpy.linalg.norm(x ,ord,axis,keepdims) :計算矩陣或向量范數。
-
numpy.linalg.cond(x ,p) :計算矩陣的條件數。
-
numpy.linalg.det(a) :計算數組的行列式。
-
numpy.linalg.matrix_rank(M ,tol) :使用奇異值分解方法返回秩。
-
numpy.linalg.slogdet(a) :計算數組的行列式的符號和自然對數。
-
numpy.trace(a ,offset,axis1,axis2,dtype,out) :沿數組的對角線返回總和。
-
numpy.linalg.solve(a, b) :求解線性矩陣方程或線性標量方程組。
-
numpy.linalg.tensorsolve(a, b ,axes) :為 x 解出張量方程 a x = b
-
numpy.linalg.lstsq(a, b ,rcond) :將最小二乘解返回到線性矩陣方程。
-
numpy.linalg.inv(a) :計算逆矩陣。
-
numpy.linalg.pinv(a ,rcond) :計算矩陣的(Moore-Penrose)偽逆。
-
numpy.linalg.tensorinv(a ,ind) :計算 N 維數組的逆。
數組的引用和分割
下標引用
一維數據
二維數據
數組的切片
Ndarray[start:stop:step]
對於二維數組,只需要用逗號分隔維度
排序,搜索和計數
排序
最后,再介紹幾個 NumPy 針對數組元素的使用方法,分別是排序、搜索和計數。 我們可以使用 numpy.sort 方法對多維數組元素進行排序。其方法為:
numpy.sort(a, axis=-1, kind='quicksort', order=None)
其中:
- a :數組。
- axis :要排序的軸。如果為 None ,則在排序之前將數組鋪平。默認值為 -1 ,沿最后一個軸 排序。
- kind : {'quicksort','mergesort','heapsort'} ,排序算法。默認值為 quicksort 。
搜索與計數
- argmax(a ,axis,out) :返回數組中指定軸的最大值的索引。
- nanargmax(a ,axis) :返回數組中指定軸的最大值的索引,忽略 NaN。
- argmin(a ,axis,out) :返回數組中指定軸的最小值的索引。
- nanargmin(a ,axis) :返回數組中指定軸的最小值的索引,忽略 NaN。
- argwhere(a) :返回數組中非 0 元素的索引,按元素分組。
- nonzero(a) :返回數組中非 0 元素的索引。
- flatnonzero(a) :返回數組中非 0 元素的索引,並鋪平。
- where(條件,x,y) :根據指定條件,從指定行、列返回元素。
- searchsorted(a,v ,side,sorter) :查找要插入元素以維持順序的索引。
- extract(condition,arr) :返回滿足某些條件的數組的元素。
- count_nonzero(a) :計算數組中非 0 元素的數量。