机器学习系列(一) 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画图

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