机器学习——Numpy库
安装
pip install numpy
conda install numpy
使用
定义一个矩阵
通过列表生成
import numpy as np
# 定义一个数组,格式一样
vector = [
[1,2,3],
[1,2,5],
[3,5,6]
]
#转换成矩阵
matrix = np.array(vector)
print(matrix)
#通过range生成,参数和range一样
matrix = np.arange(15).reshape(3,5)
print(matrix)
#通过linspace,按照间隔生成更方便一点
array = np.linspace(0,2*pi,100)
matrix = np.array(array)
print(matrix)
初始化生成
## 初始化一个全为0的矩阵
matrix = np.zeros((3,4), dtype=np.int32)
print(matrix)
## 初始化一个全为1的矩阵
matrix = np.ones((2,3), dtype=np.int32)
print(matrix)
## 随机生成一个矩阵
matrix = np.random.random((3,4))
print(matrix)
通过文件生成
## genfromtxt可以直接读取文件内容,存储成文件列表
temp = np.genfromtxt("temp.txt",delimiter=",",dtype=str)
print(type(temp))
print(temp)
矩阵的属性和方法
# 矩阵维度
print(matrix.ndim)
# 获取矩阵的长宽
print(matrix.shape)
# 获取矩阵行数
print(matrix.shape[0])
# 获取矩阵的列数
print(matrix.shape[1])
# 获取矩阵的数据类型,矩阵中数据类型是相同的
print(matrix.dtype)
#矩阵比较会返回一个列表,对矩阵中每一个元素进行比较
print(matrix == 3)
print(matrix[matrix == 3][0])
# 判断第0行,第1列的元素是否等于3
print(matrix[:,0][1] == 3)
# 转换类型
matrix = matrix.astype(float)
print(matrix.dtype)
## 极值
print(matrix.min())
print(matrix.max())
# 求和
## 对列求和
print(matrix.sum(axis=0))
##对行求和
print(matrix.sum(axis=1))
a = np.floor(10*np.random.random((5,2)))
print(a)
#按照列计算,取出最大值的索引,axis是按列计算
ind = a.argmax(axis=0)
print(ind)
#按照索引,取出值,a[行,列],
data = a[ind,range(a.shape[1])]
print(data)
计算
加减运算
a = np.array([10,20,30,40])
b = np.arange(4)
print(a)
print(b)
c = a - b
print(c)
c = c - 1
print(c)
# [10 20 30 40]
# [0 1 2 3]
# [10 19 28 37]
# [ 9 18 27 36]
乘法运算
a = np.array([[1,1],
[0,1]])
b = np.array([[2,0],
[3,4]])
print(a*2)
# [[2 2]
# [0 2]]
print(a*b)
# [[2 0]
# [0 4]]
print(a.dot(b))
# [[5 4]
# [3 4]]
print(np.dot(a,b))
# [[5 4]
# [3 4]]
矩阵变换
矩阵和列表的转换
# floor进行一个向下取整
a = np.floor(10*np.random.random((3,4)))
print(a)
# [[8. 4. 3. 2.]
# [9. 8. 5. 3.]
# [7. 7. 1. 2.]]
#矩阵转变为列表
print(a.ravel())
# [8. 4. 3. 2. 9. 8. 5. 3. 7. 7. 1. 2.]
#列表变为矩阵,写为-1表示默认为12/3,不需要自己计算
print(a.ravel().reshape(3,-1))
# [[8. 4. 3. 2.]
# [9. 8. 5. 3.]
# [7. 7. 1. 2.]]
## 矩阵的变换
a.shape = (6,2)
print(a)
# [[8. 4.]
# [3. 2.]
# [9. 8.]
# [5. 3.]
# [7. 7.]
# [1. 2.]]
# 矩阵的转置
print(a.T)
# [[8. 3. 9. 5. 7. 1.]
# [4. 2. 8. 3. 7. 2.]]
矩阵的拼接
#矩阵拼接
a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
print(a)
print(b)
#水平拼接
print(np.hstack((a,b)))
#竖直拼接
print(np.vstack((a,b)))
# [[5. 0.]
# [8. 5.]]
# [[4. 6.]
# [0. 5.]]
# [[5. 0. 4. 6.]
# [8. 5. 0. 5.]]
# [[5. 0.]
# [8. 5.]
# [4. 6.]
# [0. 5.]]
矩阵的切分
a = np.floor(10*np.random.random((2,12)))
print(a)
print(np.hsplit(a,3))
# [[7. 1. 0. 9. 9. 9. 6. 8. 0. 4. 7. 8.]
# [2. 2. 1. 3. 4. 2. 6. 9. 1. 9. 3. 5.]]
# [array([[7., 1., 0., 9.],
# [2., 2., 1., 3.]]), array([[9., 9., 6., 8.],
# [4., 2., 6., 9.]]), array([[0., 4., 7., 8.],
# [1., 9., 3., 5.]])]
print(np.hsplit(a,(3,4)))
# [array([[7., 1., 0.],
# [2., 2., 1.]]), array([[9.],
# [3.]]), array([[9., 9., 6., 8., 0., 4., 7., 8.],
# [4., 2., 6., 9., 1., 9., 3., 5.]])]
a = np.floor(10*np.random.random((12,2)))
print(a)
print(np.vsplit(a,3))
# [[3. 1.]
# [5. 1.]
# [7. 6.]
# [9. 6.]
# [8. 6.]
# [7. 1.]
# [5. 0.]
# [2. 2.]
# [5. 9.]
# [3. 3.]
# [2. 3.]
# [8. 0.]]
# [array([[3., 1.],
# [5., 1.],
# [7., 6.],
# [9., 6.]]), array([[8., 6.],
# [7., 1.],
# [5., 0.],
# [2., 2.]]), array([[5., 9.],
# [3., 3.],
# [2., 3.],
# [8., 0.]])]
矩阵的复制
a = np.floor(10*np.random.random((12,2)))
#直接复制,指针指向同一块地址,id一样
b = a
#浅复制,共用一堆值,修改b,c会改变
c = a.view()
#深复制,空间和值都和a无关
d = a.copy()
排序
a = np.array([[4,3,4],[1,2,1]])
print(a)
# [[4 3 4]
# [1 2 1]]
print(np.sort(a,axis=1))
# [[3 4 4]
# [1 1 2]]
print(np.argsort(a,axis=1))
# [[1 0 2]
# [0 2 1]]
a.sort(axis=1)
print(a)
# [[3 4 4]
# [1 1 2]]