機器學習系列(一) numpy的使用 2020.6.3

前言

開始較爲全面的學習機器學習的內容
從傳統的機器學習開始到當下火熱的深度學習
預期一個月

本節主要是較爲全面的學習numpy的使用

1、numpy數組的創建

import numpy as np

# np.array只有一個數據類型
# int類型
nparr = np.array([0,1,2,3,4,5,6])
print(nparr)
print(nparr.dtype)
nparr[3]=3.14
print(nparr) #int類型會截掉小數
# float類型
nparr2 = np.array([0,1,2,3.0,4,5,6])
print(nparr2)
print(nparr2.dtype)

# 其他創建方法
nparr3 = np.zeros(10) #10個浮點0
print(nparr3)
print(nparr3.dtype)
nparr3 = np.zeros(10,dtype=int) #10個整數0
print(nparr3)
print(nparr3.dtype)
nparr3 = np.zeros(shape=(3,5),dtype=int) #3*5個0的矩陣
print(nparr3)
print(nparr3.dtype)
nparr3 = np.full(shape=(3,5),fill_value=100) #3*5個整型100的矩陣
print(nparr3)
print(nparr3.dtype)

# arange類似range,步長可爲浮點數
npar = np.arange(0,20,2.2)
print(npar)

# linspace包含終止點,且第三個值是個數
npli = np.linspace(0,20,11)
print(npli)

# 隨機數
npran = np.random.randint(4,8,size=10) #4到8的整型
print(npran)
npran = np.random.randint(4,8,size=(3,5))
print(npran)
npran = np.random.seed(666) #種子,使得隨機數可重複
npran = np.random.randint(4,8,size=(3,5))
print(npran)
npran = np.random.random((3,5)) #3*5個0到1的浮點數
print(npran)
npran = np.random.normal(10,100,(3,5)) #3*5個均值爲10,方差爲100的浮點數

2、numpy數組的操作

import numpy as np

# 先搞兩個數組
x = np.arange(15)
print(x)
y = x.reshape(3,5) #變換爲矩陣,注意數據個數要對應
print(y)

# 基本屬性
print(x.ndim,y.ndim) #返回維度
print(x.shape,y.shape) #返回具體維度
print(x.size,y.size) # 返回個數

# 數據訪問
print(y[2,2]) #不建議兩個[][]
print(x[0:7:2],"\n",y[:2,:3],"\n",y[:,0]) #切片,這裏y如果用[][]會出問題
suby = y[:2,:3].copy() #子矩陣加上copy才能搞出一個獨立子體
print(suby)

# 分割操作
x1,x2,x3 = np.split(x,[3,7]) #以3和7爲切割點
print(x1,x2,x3)
y1,y2 = np.split(y,[2]) #根據行切割
print(y1,y2)
y1,y2 = np.split(y,[2],axis=1) #根據列切割
print(y1,y2)
y1,y2 = np.vsplit(y,[2]) #垂直分割
print(y1,y2)
y1,y2 = np.hsplit(y,[2]) #水平分割
print(y1,y2)

# 合併操作
x = np.array([1,2,3])
y = np.array([3,2,1])
z = np.array([666,666,666])
xyz = np.concatenate([x,y,z])
a = np.array([[1,2,3],[4,5,6]])
aa = np.concatenate([a,a]) #只能處理維數相同
print(aa)
aa = np.concatenate([a,a],axis=1) #軸
print(aa)
az = np.concatenate([a,z.reshape(1,-1)])
print(az)
az = np.vstack([a,z]) #垂直疊加
print(az)
b = np.full((2,2),100)
ab = np.hstack([a,b]) #水平疊加
print(ab)

3、numpy的運算

import numpy as np

# 與list作對比
x = np.arange(1000)
print(2*x) #list就不支持這種,且np的速度比list快很多

# universal function
x = np.arange(1,16).reshape((3,5))
print(x+1)
print(x-1)
print(x/2) #浮點數
print(x//2) #整數
print(x**2)
print(1/x)
print(np.abs(x))
print(np.sin(x))
print(np.exp(x))

# 矩陣運算
a = np.arange(4).reshape((2,2))
b = np.full((2,2),10)
print(a+b,a-b)
print(a*b) #對應元素的乘法
print(a.dot(b)) #矩陣乘法
print(a.T) #轉置
v = np.array([1,2])
print(a+v) #低維的對高維的每個元素進行運算
print(v*a) #同樣是每個元素運算
print(v.dot(a),a.dot(v)) #矩陣運算,會自動識別是行向量還是列向量
print(np.linalg.inv(a)) #逆矩陣
print(np.linalg.pinv(x)) #僞逆矩陣

# 聚合運算
l = np.random.random(100)
print(np.sum(l)) #求和,比python原生的sum效率高很多
print(np.max(l)) #最大值
m = np.arange(16).reshape(4,-1)
print(np.sum(m,axis=0)) #每列的和
print(np.sum(m,axis=1)) #每行的和
print(np.mean(m),np.median(m)) #期望和中位數
print(np.percentile(m,q=75)) #百分位
print(np.var(m),np.std(m)) #方差和標準差

# 索引和排序
print(np.argmax(m))
print(np.sort(m,axis=1))
print(np.argsort(m,axis=1))

4、fancy indexing

import numpy as np

x = np.arange(16)
ind = [3,5,8]
print(x[ind])
ind = np.array([[0,2],
                [1,3]])
print(x[ind])
y = x.reshape(4,-1)
row = np.array([0,1,2])
col = np.array([1,2,3])
print(y[row,col]) #三個特定點
col = [True,False,True,True]
print(y[1:3,col])

# 布爾
print(x<=4) #返回布爾
print(np.count_nonzero(x<=4)) #返回個數
print(np.all(x<=4)) #是否全滿足某性質
print(x[x<=3])
print(y[y[:,3]%3==0,:]) #最後一個數字能被3整除的行

5、matsplotlib的使用

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,100)
siny = np.sin(x)
cosy = np.cos(x)
# 折線圖
plt.plot(x,siny)
plt.plot(x,cosy,color="red",linestyle="--")
plt.xlim(1,9) #橫軸範圍
plt.axis([1,9,-2,2]) #整個圖大小
plt.xlabel("x axis")
plt.ylabel("y value")
plt.title("blablabla")
plt.legend() #標識
plt.show()
# 散點圖
plt.scatter(x,siny)
plt.scatter(x,cosy,color="red",alpha=0.5)
plt.show()

結語

機器學習裏數據基本都是矩陣形式
numpy和pandas是最常用的兩個庫
本節較爲全面的學了numpy的各種使用
順帶提了下matsplotlib畫圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章