Python之Numpy矩阵操作
Numpy是Python的一个重要科学计算库。矩阵操作是深度学习、数值计算的重要部分。只介绍矩阵操作的代码实现,不介绍数学原理。下面是一些常用的使用Numpy库矩阵操作。importnumpyasnp写在最前面,代码段中不再添加1 矩阵创建(1)通过列表创建矩阵a3 = np.mat([[1], [2], [3]])(2)创建特殊元素矩阵data1 = np.mat(np.zeros((2, 3)
Numpy是Python的一个重要科学计算库。
矩阵操作是深度学习、数值计算的重要部分。
只介绍矩阵操作的代码实现,不介绍数学原理。
下面是一些常用的使用Numpy库矩阵操作。
import numpy as np写在最前面,代码段中不再添加
1 矩阵创建
(1)通过列表创建矩阵
a3 = np.mat([[1], [2], [3]])
(2)创建特殊元素矩阵
data1 = np.mat(np.zeros((2, 3))) # 创建一个2行3列的全0矩阵
data2 = np.mat(np.ones((2, 4)), dtype=int) # 创建一个2行4列的全1矩阵,且元素为整数型
data3 = np.mat(np.random.rand(2, 5)) # 创建一个2行5列的矩阵,矩阵元素为0-1之间的随机数
data4 = np.random.rand(2, 5) # 注意,此行创建的是一个2维数组(不是列表),如要进行矩阵操作,需要将其转换成matrix
data5 = np.mat(data4) # data5是一个矩阵
data6 = np.mat(np.random.randint(1, 10, size=(3, 5))) # 生成一个3*5的1-9之间的随机整数矩阵
data7 = np.mat(np.eye(2, 2, dtype=int)) # 生成2*2的单位对角阵,且元素为整数型
a1 = [1, 2, 3]
a2 = np.mat(np.diag(a1)) # 生成一个以a1为对角线的对角阵
(3)复制矩阵
data3 = np.mat(np.random.rand(2, 5)) # 创建一个2行5列的矩阵,矩阵元素为0-1之间的随机数
data4 = data3.copy # 复制一个data3
data5 = np.ones_like(data4) # 返回一个用1填充的跟输入矩阵data4形状和类型一样的矩阵
data6 = np.zeros_like(data4) # 返回一个用0填充的跟输入矩阵data4形状和类型一样的矩阵
2 矩阵计算
(1)矩阵乘法
a1 = np.mat([1, 1])
a2 = np.mat([2, 2])
a3=a1 * a2
(2)矩阵各个元素对应相乘(不是矩阵乘法)
# 矩阵对应元素相乘
a1 = np.mat([1, 1])
a2 = np.mat([2, 2])
a3 = np.multiply(a1, a2)
(3) 矩阵数乘
a1 = np.mat([1, 1])
a2= 5*a1
(4) 可逆矩阵求逆
# 矩阵求逆
a1 = np.mat([[0.5,0],[0,0.5]])
a2 = np.linalg.inv(a1)
a3 = a1**(-1) # 两者等效
(5)矩阵转置
# 矩阵转置
a1 = np.mat([[1, 1], [0, 5]])
a2 = np.transpose(a1)
(6)求列和、行和、所有元素和
a1 = np.mat([[1, 1], [0, 5]])
a2 = np.sum(a1, axis=0) # 列和,这里得到的是1*2的矩阵
a3 = np.sum(a1, axis=1) # 行和,这里得到的是2*1的矩阵
a4 = np.sum(a1[0, :]) # 计算第一行所有列的和,这里得到的是一个数值
a5 = np.sum(a1[:, 1]) # 计算第二列所有行的和,这里得到的是一个数值 ,注意逗号与冒号的位置
a6 = np,sum(a1) # 计算矩阵中所有元素和
(7)计算矩阵中的最值及其索引
# 计算最值
a2 = np.max(a1) # 计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
a3 = max(a1[:, 1]) # 计算第二列的最大值,这里得到的是一个1*1的矩阵
a4 = np.max(a1[1, :]) # 计算第二行的最大值,这里得到的是一个一个数值
a5 = np.max(a1, 0) # 计算各列的最大值,返回1*2矩阵
a6 = np.max(a1, 1) # 计算各行的最大值,这里得到是一个2*1矩阵
a7 = np.argmax(a1, 0) # 计算所有列的最大值对应在该列中的索引
a8 = np.argmax(a1[1, :]) # 计算第二行中最大值对应在改行的索引
3 矩阵分割
a = np.mat([[1, 2, 3], [4, 5, 6], [7,8,9]])
b = a[1:, 1:] # 分割出第二行以后的行和第二列以后的列的所有元素,实际上就是右下角的2*2矩阵
4 矩阵合并
a = np.mat(np.ones((2, 2)))
b = np.mat(np.eye(2))
c = np.vstack((a, b)) # 按列合并,即增加行数,在a矩阵下面加
d = np.hstack((a, b)) # 按行合并,即行数不变,在a矩阵右边加
5 矩阵转化
矩阵matrix、列表list、数组array的互相转换。
(1)三者之区别
普通列表(list)可以修改,并且列表中元素可以使不同类型的数据;
对于 Numpy中的数组(array),其所有元素必须为同一类型,list转化为array时会被强制转换类型;
将数组array与矩阵matrix打印出来后,他们在形式上很类似,但是array为数组,不能进行矩阵相关运算。
(2)三者之转换
1)列表转化为数组或矩阵
a1 = [[1, 2], [3, 2]] # 一个二维list列表
a2 = np.array(a1) # 将列表转换成二维数组
a3 = np.mat(a1) # 将列表转化成2*2矩阵
2)矩阵转化为数组或列表
a1 = [[1, 2], [3, 2]]
a3 = np.mat(a1) # 将列表转化成2*2矩阵
a4 = np.array(a3) # 将矩阵转换成array数组
a5 = a3.tolist() # 将矩阵转换成list列表
3)数组转化为矩阵或列表
a1 = [[1, 2], [3, 2]] # 一个二维list列表
a2 = np.array(a1) # 将列表转换成二维数组
a6 = a2.tolist() # 将array数组转换成list列表
a7 = np.mat(a2) # 将array数组转换成matrix矩阵
4)特别注意
若先将一维列表转换成矩阵,再通过tolist()换回得一新列表,该新列表与最初列表不同。
a1 = [1, 2, 3]
a2 = np.array(a1)
a3 = np.mat(a1)
a4 = a2.tolist() # 这里得到的是[1,2,3], 与a1相同
a5 = a3.tolist() # 这里得到的是[[1,2,3]], 与a1不同
解决方法为:
a1 = [1, 2, 3]
a5 = a3.tolist() # 这里得到的是[[1,2,3]]
a6 = a5[0] # 这里得到的是[1,2,3], 与a1相同
更多推荐
所有评论(0)