Numpy基礎(chǔ)入門【2】

通用函數(shù)ufunc

一元ufunc舉例:
1、abs、fabs:計算絕對值,fabs更快
2、sqrt:計算各元素的平方根,相當(dāng)于arr0.5
3、square:計算各元素的平方根,相當(dāng)遠arr
2
4、exp:計算各元素的指數(shù)e的x次方
...
二元ufunc舉例:
1、add:將數(shù)組中對應(yīng)的元素想加
2、subtract:從第一個數(shù)組中減去第二個數(shù)組中的元素
3、multiply:數(shù)組元素相乘
4、divide:除法
5、power:對第一個數(shù)組中的元素A,根據(jù)第二個數(shù)組中的相應(yīng)元素B,計算A的B次方。

利用數(shù)組進行數(shù)據(jù)處理

用數(shù)組表達式代替循環(huán)的做法,通常被稱為矢量化,要比等價的Python方法快上一兩個數(shù)量級,尤其是數(shù)值運算。
np.meshgrid函數(shù)的用法,[X,Y] = meshgrid(x,y) 將向量x和y定義的區(qū)域轉(zhuǎn)換成矩陣X和Y,這兩個矩陣可以用來表示mesh和surf的三維空間點以及兩個變量的賦值。其中矩陣X的行向量是向量x的簡單復(fù)制,而矩陣Y的列向量是向量y的簡單復(fù)制。舉例如下:

import numpy as np
points=np.arange(-5,5,0.01)
xs,ys=np.meshgrid(points,points)
xs
array([[-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       ..., 
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99]])

將條件邏輯表述為數(shù)組運算
np.where函數(shù)是三元表達式x if condition else y的矢量化版本,舉例:

xarr=np.array([1.1,1.2,1.3,1.4,1.5])
yarr=np.array([2.1,2.2,2.3,2.4,2.5])
cond=np.array([True,False,True,True,False])
cond
array([ True, False,  True,  True, False], dtype=bool)

假設(shè)我們想根據(jù)cond中的值來確定選擇xarr還是yarr,使用列表推導(dǎo)式的方法如下:

result=[(x if c else y) for x,y,c in zip(xarr,yarr,cond)]

可以想到,這種方法的處理速度不是很快,無法用于多維數(shù)組。使用np.where會更為簡單:

result=np.where(cond,xarr,yarr)
result
array([ 1.1,  2.2,  1.3,  1.4,  2.5])

其中where函數(shù)的第二三個參數(shù)不一定是數(shù)組,可以是標(biāo)量。
cond就是負責(zé)判斷,生成的數(shù)組與cond的構(gòu)型一樣

排序

sort方法,對于多維數(shù)組,可以接收參數(shù),在任何一個軸向上進行排序。
np.sort返回的是數(shù)組的已排序副本,arr.sort則會修改數(shù)組本省。
例如:

arr=np.random.randn(8)
arr
array([-1.86799618,  1.17907009, -0.17769902,  1.52782505, -1.00578336,
       -0.606077  ,  1.24019255,  0.02054406])
arr.sort()
arr
array([-1.86799618, -1.00578336, -0.606077  , -0.17769902,  0.02054406,
        1.17907009,  1.24019255,  1.52782505])
arr=np.random.randn(5,3)
arr
array([[-0.87890012,  0.83758321,  0.07969702],
       [-1.12805445, -0.32557521, -0.65476785],
       [ 1.33504954,  0.59905743,  3.13774442],
       [-1.07642073,  0.08063416,  0.8242277 ],
       [-0.40929861, -0.14981955, -1.56494243]])
arr.sort(1)
arr
array([[-0.87890012,  0.07969702,  0.83758321],
       [-1.12805445, -0.65476785, -0.32557521],
       [ 0.59905743,  1.33504954,  3.13774442],
       [-1.07642073,  0.08063416,  0.8242277 ],
       [-1.56494243, -0.40929861, -0.14981955]])
numpy.sort(a, axis=-1, kind='quicksort', order=None)

返回數(shù)組的排序副本。
參數(shù):
a:array_like
數(shù)組要排序。
axis:int或None,可選
要排序的軸。如果為“無”,則在排序之前將數(shù)組展平。默認值為-1,沿最后一個軸排序。
kind:{'quicksort','mergesort','heapsort'},可選
排序算法。默認值為“quicksort”。
order:str或str的列表,可選
當(dāng)a是定義了字段的數(shù)組時,此參數(shù)指定首先,第二等比較哪些字段。單個字段可以指定為字符串,并且不是所有字段都需要指定,但是未指定的字段仍將按照它們在dtype中出現(xiàn)的順序使用,以斷開關(guān)系。
返回:
sorted_array:ndarray
數(shù)組的類型和形狀與a相同。

用于數(shù)組的文件輸入輸出

1、二進制格式保存
np.save和np.load是讀寫數(shù)據(jù)的兩個主要函數(shù)。
2、文本文件
np.loadtxt或更為專業(yè)的np.genfromtxt函數(shù)將文本數(shù)據(jù)加載到普通的Numpy數(shù)組中
np.savetxt保存文本。

線性代數(shù)

常用的函數(shù)說明:
diag,以一維數(shù)組的形式返回方針的對角線(或?qū)蔷€)元素,或?qū)⒁唤M數(shù)組轉(zhuǎn)換成方陣。
numpy.diag(v, k=0)
參數(shù):
v:array_like
如果v是2-D數(shù)組,則返回其k對角線的副本。如果v是1-D數(shù)組,則在k對角線上返回具有v的2-D數(shù)組。
k:int,可選
有問題的對角線。默認值為0。對于主對角線上方的對角線使用k> 0,對于主對角線下方的對角線使用k 。
返回:
out:ndarray
提取的對角線或構(gòu)造的對角數(shù)組。

x=np.arange(9).reshape(3,3)
np.diag(x)
array([0, 4, 8])
np.diag(x,k=1)
array([1, 5])
np.diag(x,k=-1)
array([3, 7])
np.diag(np.diag(x))
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 8]])

numpy.dot(a, b, out=None)
兩個數(shù)組的點積。
對于2-D數(shù)組,其等效于矩陣乘法,對于1-D數(shù)組等效于向量的內(nèi)積(無共軛復(fù)數(shù))。對于N維,它是a的最后一個軸和b的倒數(shù)第二個軸的積的和:
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
參數(shù):
a:array_like
第一個參數(shù)。
b:array_like
第二個參數(shù)。
out:ndarray,可選
輸出參數(shù)。如果沒有使用,返回必須有確切的類型。特別地,它必須具有正確的類型,必須是C連續(xù)的,并且其dtype必須是dot(a,b)將返回的dtype。這是一個性能特性。因此,如果不滿足這些條件,則引發(fā)異常,而不是試圖靈活。
返回:
輸出:ndarray
返回a和b的點積。如果a和b都是標(biāo)量或都是1-D數(shù)組,則返回標(biāo)量;否則返回一個數(shù)組。如果給出out,則返回。
引發(fā):
ValueError
如果a的最后一個維度大小與b的倒數(shù)第二個維度的大小不同。

numpy.trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None)
沿數(shù)組的對角線返回總和。
如果a是2-D,則返回具有給定偏移的沿其對角線的和,即對于所有i,元素a[i,i+offset]
如果a有兩個以上的尺寸,則由axis1和axis2指定的軸用于確定返回其軌跡的2-D子數(shù)組。所得數(shù)組的形狀與移除axis1和axis2的a的形狀相同。

參數(shù):
a:array_like
輸入數(shù)組,從中獲取對角線。
offset:int,可選
對角線與主對角線的偏移??梢允钦婧拓撁?。默認為0。
axis1,axis2:int,可選
軸將被用作應(yīng)從中獲取對角線的2-D子陣列的第一和第二軸。默認值是a的前兩個軸。
dtype:dtype,可選
確定返回的數(shù)組和累加器元素的累加器的數(shù)據(jù)類型。如果dtype具有值None且a是小于默認整數(shù)精度的整數(shù)類型的精度,則使用缺省整數(shù)精度。否則,精度與a的精度相同。
out:ndarray,可選
數(shù)組,其中放置輸出。它的類型被保留,并且它必須是保持輸出的正確形狀。
返回:
sum_along_diagonals:ndarray
如果a是2-D,則返回沿對角線的和。如果a具有較大的維,則返回沿對角線的和的數(shù)組。

還有幾個其他的,比如:
det,計算矩陣行列式
inv,計算矩陣的逆
lstsq,計算Ax=B的最小二乘解

隨機數(shù)的生成

numpy.random模塊增加了一些 高效生成多種概率分布的樣本值的函數(shù),比如normal,可以得到一個標(biāo)準(zhǔn)正太分布的數(shù)組:

samples=np.random.normal(size=(4,4))
samples
array([[ 0.05362618, -1.44096904, -0.59506811, -1.14913339],
       [-0.82946896, -2.47470801, -0.25017015, -0.50970962],
       [-0.28899863,  0.98025628,  0.36890152, -0.26948141],
       [ 0.87736262,  1.43316428, -0.28441972,  0.81287675]])

還有其他的一些函數(shù),比如:
rand,產(chǎn)生均勻分布的樣本值
randint,從給定的上下限范圍內(nèi)隨機選取整數(shù)
randn,產(chǎn)生正態(tài)分布(平均值為0,標(biāo)準(zhǔn)差為1)的樣本。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容