通用函數(shù)ufunc
一元ufunc舉例:
1酣藻、abs笑窜、fabs:計算絕對值,fabs更快
2、sqrt:計算各元素的平方根瓤檐,相當于arr0.5
3蒂誉、square:計算各元素的平方根,相當遠arr2
4距帅、exp:計算各元素的指數(shù)e的x次方
...
二元ufunc舉例:
1右锨、add:將數(shù)組中對應的元素想加
2、subtract:從第一個數(shù)組中減去第二個數(shù)組中的元素
3碌秸、multiply:數(shù)組元素相乘
4绍移、divide:除法
5、power:對第一個數(shù)組中的元素A讥电,根據(jù)第二個數(shù)組中的相應元素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的簡單復制孝宗,而矩陣Y的列向量是向量y的簡單復制。舉例如下:
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)
假設我們想根據(jù)cond中的值來確定選擇xarr還是yarr因妇,使用列表推導式的方法如下:
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ù)組狡忙,可以是標量。
cond就是負責判斷址芯,生成的數(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的列表,可選
當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)積(無共軛復數(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都是標量或都是1-D數(shù)組贬媒,則返回標量;否則返回一個數(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靶擦,可選
軸將被用作應從中獲取對角線的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,可以得到一個標準正太分布的數(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吃度,標準差為1)的樣本甩挫。