一、numpy
用NumPy快速處理數據
NumPy 是一個運行速度非常快的數學庫,主要用於數組計算,包含:
矩陣運算
jupyter快捷鍵
1、ndarray 對象
ndarray 實際上是多維數組的含義。
在 NumPy 數組中,維數稱為秩(rank),一維數組 的秩為 1,二維數組的秩為 2,以此類推。在 NumPy 中,每一個線性的數組稱為一個軸 (axes),其實秩就是描述軸的數量。
創建數組
# 引入numpy模塊 import numpy as np # 創建二維數組 array = np.array([[1,2,3],[4,5,6]]) print(array,type(array)) [[1 2 3] [4 5 6]] <class 'numpy.ndarray'>
獲取數組屬性值
# ndim 維度的數量 print('維度的數量',array.ndim) # 維度 print('維度',array.shape) # 數組元素的個數 print('數組元素的個數',array.size) # 對象元素的類型 print('對象元素的類型',array.dtype) # 對象每個元素的大小、以字節為單位 print('對象每個元素的大小、以字節為單位',array.itemsize) # 對象內存信息 print(' 對象內存信息',array.flags)
特殊函數創建
關鍵字
array:創建數組
dtype:指定數據類型
zeros:創建數據全為0
ones:創建數據全為1
empty:創建數據接近0
arange:按指定范圍創建數據
linspace:創建線段

# 創建全零數組 # 數據全為0,3行4列 # 默認為float a = np.zeros((3,4)) print(a) print(a.dtype) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] float64 # 創建全為1的數組, 同時也能指定這些特定數據的 dtype: a = np.ones((3,4),dtype=np.int) print(a) print(a.dtype) [[1 1 1 1] [1 1 1 1] [1 1 1 1]] int32 # 創建全空數組, 其實每個值都是接近於零的數: a = np.empty((3,4)) print(a) print(a.dtype) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] float64 # 用 arange 創建連續數組: # 10-19 的數據,2步長 arange用來創建數組 a = np.arange(10,20,2) print(a) print(a.dtype) [10 12 14 16 18] int32 # 使用 reshape 改變數據的形狀 # 3行4列 ,0到11 a = np.arange(12).reshape((3,4)) print(a) print(a.dtype) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] int32 # 用 linspace 創建線段型數據: # 開始端為1 ,結束端10,且分割成20個數據,生成線段 a = np.linspace(1,10,20) print(a) print(a.dtype)
結構數組
# 結構數組 import numpy as np # 定義數組結構 # persontype = np.dtype({ # 'names':['name', 'age', 'chinese', 'math', 'english'], # 'formats':['S32','i', 'i', 'i', 'f']}) # 也可以這樣定義 persontype = np.dtype( [('name','S32'),( 'age','i'), ('chinese','i'), ('math','i'), ('english','i')] ) peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5), ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)], dtype=persontype)
print(peoples)
ages = peoples[:]['age'] chineses = peoples[:]['chinese'] maths = peoples[:]['math'] englishs = peoples[:]['english'] print(np.mean(ages)) print(np.mean(chineses)) print(np.mean(maths)) print(np.mean(englishs))
28.25 77.5 93.25 93.5
創建隨機數組
random.random()函數是這個模塊中最常用的方法了,它會生成一個隨機的浮點數,范圍是在0.0~1.0之間。
指定范圍和形狀的隨機浮點數數組
數組的數據類型
算數運算
通過 NumPy 可以自由地創建等差數組,同時也可以進行加、減、乘、除、求 n 次方和取余數。 # 通過 NumPy 可以自由地創建等差數組,同時也可以進行加、減、乘、除、求 n 次方和取余數。 x1 = np.arange(1,11,2) x2 = np.linspace(1,9,5) print('x1:',x1) print('x2:',x2) print(np.add(x1, x2)) print(np.subtract(x1, x2)) print(np.multiply(x1, x2)) print(np.divide(x1, x2)) print(np.power(x1, x2)) print(np.remainder(x1, x2)) x1: [1 3 5 7 9] x2: [1. 3. 5. 7. 9.] [ 2. 6. 10. 14. 18.] [0. 0. 0. 0. 0.] [ 1. 9. 25. 49. 81.] [1. 1. 1. 1. 1.] [1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05 3.87420489e+08] [0. 0. 0. 0. 0.]
在取余函數里,你既可以用 np.remainder(x1, x2),也可以用 np.mod(x1, x2),結果是一
樣的。
ndarray數組運算
(1)數組與標量之間的運算作用於數組的每一個元素
a = np.arange(24).reshape(6,4) print(a+1) print(a*10)

# 計算A^2+B^2
import numpy as np
A=[1,2,3]
B=[4,5,6]
a1 = np.array(A)
a2 = np.array(B)
a1**2+a2**2
--------------------------------------------------------------------------------------------
統計函數
最大值、最小值、平均值,是否符合正態分布,方差、標准差多少等等。它們可以讓你更清楚地對這組數據有認知。
計數組 / 矩陣中的最大值函數 amax(),最小值函數 amin()
import numpy as np a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(np.amin(a)) print(np.amin(a,0)) print(np.amin(a,1)) print(np.amax(a)) print(np.amax(a,0)) print(np.amax(a,1))

對於一個二維數組 a,amin(a) 指的是數組中全部元素的最小值,

amin(a,0) 是延着 axis=0 軸的最小值,axis=0 軸是把元素看成了 [1,4,7], [2,5,8], [3,6,9] 三個元素,所以最小值為 [1,2,3],
amin(a,1) 是延着 axis=1軸的最小值,
axis=1 軸是把元素看成了 [1,2,3], [4,5,6], [7,8,9] 三個元素,所以最小值為 [1,4,7]。
同理 amax() 是計算數組中元素沿指定軸的最大值。
統計最大值與最小值之差 ptp()
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(np.ptp(a)) print(np.ptp(a,0)) print(np.ptp(a,1))

統計數組的百分位數 percentile()
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(np.percentile(a, 50)) print(np.percentile(a, 50, axis=0)) print(np.percentile(a, 50, axis=1))

同樣,percentile() 代表着第 p 個百分位數,這里 p 的取值范圍是 0-100,如果 p=0, 那么就是求最小值,如果 p=50 就是求平均值,如果 p=100 就是求最大值。同樣你也可 以求得在 axis=0 和 axis=1 兩個軸上的 p% 的百分位數。
統計數組中的中位數 median()、平均數 mean()
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 求中位數 print(np.median(a)) print(np.median(a, axis=0)) print(np.median(a, axis=1)) # 求平均數 print(np.mean(a)) print(np.mean(a, axis=0)) print(np.mean(a, axis=1))

統計數組中的加權平均值 average()
a = np.array([1,2,3,4]) wts = np.array([1,2,3,4]) print(np.average(a)) print(np.average(a,weights=wts))

average() 函數可以求加權平均,加權平均的意思就是每個元素可以設置個權重,默認情 況下每個元素的權重是相同的,所以 np.average(a)=(1+2+3+4)/4=2.5,你也可以指定 權重數組 wts=[1,2,3,4],這樣加權平均 np.average(a,weights=wts)= (1*1+2*2+3*3+4*4)/(1+2+3+4)=3.0。
統計數組中的標准差 std()、方差 var()
a = np.array([1,2,3,4]) print(np.std(a)) print(np.var(a))

NumPy 排序
a = np.array([[4,3,2],[2,4,1]]) print(np.sort(a)) print() print(np.sort(a, axis=None)) print() print(np.sort(a, axis=0)) print() print(np.sort(a, axis=1))

求和sum
# 求和 a2 = np.arange(24).reshape(4,6) a2 print(a2.sum())#整體求和 print(a2.sum(axis=0))#對縱向求和 print(a2.sum(axis=1))#對橫向求和