PYTHON數據分析庫-Numpy學習


引言

要想學的更好,還是要看官方網站

https://www.numpy.org.cn/

創建數組

通過列表

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)

注意:起始位置是左閉右開區間

image

linspace-指定首尾和數目

創建數值有規律的數組。 linspace 用於在指定的區間內返回間隔均勻的值。其方法如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • start :序列的起始值。
  • stop :序列的結束值。
  • num :生成的樣本數。默認值為50。
  • endpoint :布爾值,如果為真,則最后一個樣本包含在序列內。
  • retstep :布爾值,如果為真,返回間距。
  • dtype :數組的類型。

image

ones方法

numpy.ones用於快速創建數值全部為1的多維數組

numpy.ones 用於快速創建數值全部為 1 的多維數組。其方法如下:

numpy.ones(shape, dtype=None, order='C')

其中:

  • shape :用於指定數組形狀,例如(1, 2)或 3。
  • dtype :數據類型。
  • order : {'C','F'} ,按行或列方式儲存數組。

image

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(默認)是指主對角線,正值是指上對角線,負值是指下對角線。

image

從已知數據文件創建

  • 創建 frombuffer(buffer) :將緩沖區轉換為 1 維數組。
  • fromfile(file,dtype,count,sep) :從文本或二進制文件中構建多維數組。
  • fromfunction(function,shape) :通過函數返回值來創建多維數組。
  • fromiter(iterable,dtype,count) :從可迭代對象創建 1 維數組。
  • fromstring(string,dtype,count,sep) :從字符串中創建 1 維數組

image

對數組的操作

數組的格式改變

b=a.astype(int)

image

數組的轉置

ndarray.T 用於數組的轉置,與 .transpose() 相同

a.T

transpose 類似於矩陣的轉置,它可以將 2 維數組的橫軸和縱軸交換。其方法如下:

numpy.transpose(a, axes=None)

其中:

  • a :數組。
  • axis :該值默認為 none ,表示轉置。如果有值,那么則按照值替換軸。

對於此函數的解釋:

在高二維的矩陣運算中轉置可能導致維度混亂,用參數二可以對維度進行調整

image

正常轉置

image

此時是直接把維度調過來了

然而,加上參數,可以對維度的排列進行調整

[1, 0, 2]指的是原來的第二維到了第一的位置,第一維到了第二的位置,第三維不變

image

重設數組形狀

reshape 可以在不改變數組數據的同時,改變數組的形狀。其中, numpy.reshape() 等效於 ndarray.reshape() 。 reshape 方法非常簡單:

numpy.reshape(a, newshape)

其中,a 表示原數組, newshape 用於指定新的形狀(整數或者元組)。

image

resize 用法相似:

  • resize(a,new_shape) :對數組尺寸進行重新設定。

image-20210830231017752

reshape 在改變形狀時,不會影響原數組, 相當於對原數組做了一份拷貝。而 resize 則是對原數組執行操作。

數組展開

ravel 的目的是將任意形狀的數組扁平化,變為 1 維數組。 ravel 方法如下:

numpy.ravel(a, order='C')

其中,a 表示需要處理的數組。 order 表示變換時的讀取順序,默認是按照行依次讀取,當 order='F' 時,可以按列依次讀取排序。

image

軸移動

moveaxis 可以將數組的軸移動到新的位置。其方法如下:

numpy.moveaxis(a, source, destination)
  • a :數組。
  • source :要移動的軸的原始位置。
  • destination :要移動的軸的目標位置。

image

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 :指定連接軸。

image

數組堆疊

  • stack(arrays,axis) :沿着新軸連接數組的序列。
  • column_stack() :將 1 維數組作為列堆疊到 2 維數組中。
  • hstack() :按水平方向堆疊數組。
  • vstack() :按垂直方向堆疊數組。
  • dstack() :按深度方向堆疊數組。

image
橫着堆疊

image

數組刪除行或列

首先是 delete 刪除:

  • delete(arr,obj,axis) :沿特定軸刪除數組中的子數組。

image

數組插入行或列

insert 插入,用法和 delete 很相似,只是需要在第三個參數位置設置需要插入的數組對象:

  • insert(arr,obj,values,axis) :依據索引在特定軸之前插入值。

image

append插入

append 的用法也非常簡單。只需要設置好需要附加的值和軸位置就好了。它其實相當於只能在末 尾插入的 insert ,所以少了一個指定索引的參數。

append(arr,values,axis) :將值附加到數組的末尾,並返回 1 維數組。

image

數組的拆分

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的值如果是一個整數的話,就用這個數平均分割原數組。

image

  • indices_or_sections的值如果是一個數組的話,就以數組中的數字為索引切開.

image

數組信息獲取

輸出數據類型

ndarray.dtype用來輸出數組包含元素的數據類型。

a.dtype

輸出形狀/大小

ndarray.ndim 用來輸出數組維度。

ndarray.shape 用來輸出數組形狀。

ndarray.size 用來輸出數組中的總包含元素數。

image

輸出實部/虛部

ndarray.imag 用來輸出數組包含元素的虛部。

ndarray.real 用來輸出數組包含元素的實部。

a.imaga.real

Numpy隨機數

生成[0,1]隨機數

numpy.random.rand(d0, d1, ..., dn) 方法的作用為:

指定一個數組,並使用 [0, 1) 區間 隨機數據填充,這些數據均勻分布。 如果傳入的數是一個,則生成一個一維數組 如果傳入的數是兩個,則生成一個二維數組

image

randn 方法與 rand 用法相同,不同的是 randn 服從正態分布

生成左閉右開區間內的隨機整數

randint(low, high, size, dtype) 方法將會生成 [low, high) 的隨機整數。注意這是一個 半開半閉區間。

np.random.randint(2, 5, (2,5))

image

在數組中隨機抽取

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 維數組的逆。

數組的引用和分割

下標引用

一維數據

image

二維數據

image

數組的切片

Ndarray[start:stop:step]

對於二維數組,只需要用逗號分隔維度

image

排序,搜索和計數

排序

最后,再介紹幾個 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 元素的數量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM