NumPy(Numerical Python)是python語言的一個擴展程序庫,支持大量維度數組與矩陣運算,此外,也針對數據運算提供大量的數學函數庫。python
NumPy是高性能科學計算和數據分析的基礎數組
NumPy的主要功能:dom
ndarray,一個多維數組結構,高效且節省空間ide
無需循環對整組數據進行快速運算的數學函數函數
*讀寫磁盤數據的工具以及用於操做內存映射文件的工具工具
*線性代數、隨機數生成和傅里葉變換功能性能
*用於集成C、C++等代碼的工具ui
pip install numpy
ndarry是多維數組結構,與列表區別:lua
數組對象內的元素類型必須相同spa
數組大小不可修改
import numpy as np np.array() # 建立一維數組 np.array([1,2,3,4,5]) # array([1, 2, 3, 4, 5]) # 建立二維數組 np.array([[1,2,3],[4,5,6]]) # array([[1, 2, 3], [4, 5, 6]])
注意:
numpy默認ndarray的全部元素的類型是相同的
若是傳進列表中包含不一樣的類型,會統一爲一個類型,優先級:str>float>int
np.array([[1,2.2,3],[4,5,6]]) # 整數都會變成浮點數 # array([[1. , 2.2, 3. ], [4. , 5. , 6. ]])
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差數量數組
np.linspace(1,100,num=20) # 產生1-100之間數量20個的等差數組
np.arange([start, ]stop, [step, ]dtype=None) 等差步長數組
np.arange(0,100,step=2) # 產生0-100,步長爲2的等差數組
random.randint(low,high=None,size=None,dtype="1")
np.random.randint(0,100,size=(4,5)) # size表示維度 # array([[83, 58, 4, 20, 35], [13, 33, 30, 14, 79], [86, 58, 33, 44, 63], [43, 40, 55, 16, 13]]) # 固定隨機數組的隨機因子,每次產生固定不變數組 np.random.seed(10) # 隨機因子/時間種子 np.random.randint(0,100,size=(4,5))
T:數組的轉置(對高維數組而言)
dtype:數組元素的數據類型
size:數組元素的個數
ndim:數組的維數
shape:數組的維度大小(以元組形式)
img_arr = plt.imread('./girl.jpg') # 打開一張圖片,獲取圖片的矩陣數組 # 獲取數組的維度 img_arr.ndim # 3 # 獲取數組的外形 img_arr.shape # (676, 1202, 3) # 獲取數組的大小 img_arr.size # 2437656 # 獲取數組的數據類型 img_arr.dtype # dtype('uint8')
numpy.zeros(dim1,dim2) 建立dim1*dim2的零矩陣 numpy.arange numpy.eye(n) /numpy.identity(n) 建立n*n單位矩陣 numpy.array([…data…], dtype=float64 ) array.astype(numpy.float64) 更換矩陣的數據形式 array.astype(float) 更換矩陣的數據形式 array * array 矩陣點乘 array[a:b] 切片 array.copy() 獲得ndarray的副本,而不是視圖 array [a] [b]=array [ a, b ] 二者等價 name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool) data[True,False,…..] 索引,只索取爲True的部分,去掉False部分 經過布爾型索引選取數組中的數據,將老是建立數據的副本。 data[ [4,3,0,6] ] 索引,將第4,3,0,6行摘取出來,組成新數組 data[-1]=data[data.__len__()-1] numpy.reshape(a,b) 將a*b的一維數組排列爲a*b的形式 array([a,b,c,d],[d,e,f,g]) 返回一維數組,分別爲[a,d],[b,e],[c,f],[d,g] array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ] array.T array的轉置 numpy.random.randn(a,b) 生成a*b的隨機數組 numpy.dot(matrix_1,matrix_2) 矩陣乘法 array.transpose( (1,0,2,etc.) ) 對於高維數組,轉置須要一個由軸編號組成的元組
一、數組和標量之間的運算 a+1 a*3 1//a a**0.5 二、一樣大小數組之間的運算 a+b a/b a**b 三、數組的索引: 一維數組:a[5] 多維數組: 列表式寫法:a[2][3] 新式寫法:a[2,3] (推薦) 數組的切片: 一維數組:a[5:8] a[4:] a[2:10] = 1 多維數組:a[1:2, 3:4] a[:,3:5] a[:,1] 四、強調:與列表不一樣,數組切片時並不會自動複製,在切片數組上的修改會影響原數組。 【解決方法:copy()】
一維數組的索引和列表一致,多維同理
沒法直接索引某一列
arr = np.random.randint(0,100,size=(5,7)) arr[1] # 獲取索引爲1的行 arr[[1,2]] # 獲取索引1,2的行 arr[1,2] # 獲取行索引爲1,列索引爲2的值
一維數組的切片和列表相同,多維同理
# 獲取二維數組前兩行 arr[0:2] # 默認切片爲行索引 # 獲取二維數組前兩行和前兩列 arr[0:2,0:2]
數據反轉
# 將數組的行反轉 arr[::-1] # 將數組的列反轉 arr[:,::-1] # 所有反轉 arr[::-1,::-1]
ndarray數組可使用arr.reshape()函數,注意參數是一個tuple
多維數組和一維數組之間的轉換
arr = np.random.randint(0,100,size=(4,6)) arr.shape # 二維變一維 arr_1 = arr.reshape(24) arr_2 = arr.reshape((1,24)) # 一維變多維 arr_3 = arr_1.reshape((3,8)) arr_4 = arr_1.reshape arr_5 = arr_1.reshape((4,-1)) # -1表示自動計算 # 多維轉多維 arr_6 = arr.reshape((3,8))
注意:
在變形的過程當中,數組的維度乘積必須是一致的,如4*6 能夠變形爲2*12,也能夠變爲8*3,1*24
np.concatenate()
對多個numpy數組進行橫向或者縱向的拼接
1.一維、二維、多維數組的級聯,實際操做中級聯爲二維數組
np.concatenate((arr,arr),axis=0) # axis表明軸向,0表示咧,1表示行
2.合併照片
# 利用咱們剛纔打開的照片數組 arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # 水平拼接三個數組 arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0) # 垂直拼接上面拼接的圖片 plt.imshow(arr_9) # 最終展現爲9宮格的圖片
問題:給一個數組,選出數組中全部大於5的數。
答案:a[a>5] 原理: a>5會對a中的每個元素進行判斷,返回一個布爾數組 布爾型索引:將一樣大小的布爾數組傳進索引,會返回一個由全部True對應位置的元素的數組
問題2:給一個數組,選出數組中全部大於5的偶數。
問題3:給一個數組,選出數組中全部大於5的數和偶數。
答案: a[(a>5) & (a%20)] a[(a>5) | (a%20)]
import numpy as np a = np.array([1,2,3,4,5,4,7,8,9,10]) a[a>5&(a%2==0)] # 注意加括號,不叫括號錯誤,以下 # array([ 1, 2, 3, 4, 5, 4, 7, 8, 9, 10]) a[(a>5)&(a%2==0)] # array([ 8, 10])
numpy.sum():求和函數
numpy.max()/min():最大值/最小值
numpy.mean():平均值
cumsum:求前綴和
std:求標準差
var:求方差
argmin:求最小值索引
argmax:求最大值索引
arr.sum(axis=1) # 列向求和 arr.max(axis=1) # 列向最大值 arr.mean(axis=1) # 列向平均值
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 冪運算
numpy.sort()和ndarray.sort()均可以排序,稍有區別
numpy.sort(arr,axis=0) # 返回一個新的排序好的對象,arr並無改變 arr.sort(axis=0) # arr直接被改變了