numpy库用于矩阵运算,所以一般先导入它。
from numpy import *
import numpy as np
1 矩阵创建
#创建一维数组
a1=array([1,2,3])
#将数组转为矩阵
a1=mat(a1)
输出a1:matrix([[1, 2, 3]])
当然也可以对矩阵操作:
a1.reshape(3,-1)
这会将矩阵转为3*x的矩阵,因为只有3个元素,所以这里x=1。
其他创建矩阵方法:
#创建3×3的0矩阵,zeros函数参数是一个元组
data1=mat(zeros((3,3)))
#创建4×4的1矩阵,无论是zeros,还是ones都可以设置参数dtype=int/float32修改数据类型,默认是浮点
data2=mat(ones((4,4)))
#random.rand(3,3)随机生成3×3大小值为0-1之间的数组
data3=mat(random.rand(3,3))
#随机生成在0-10之间生成3×3大小的整数矩阵,多加一个参数可指定下界
data4=mat(random.randint(10,size=(3,3)))
#生成的是1-8之间的,3×5大小的整数矩阵
data5=mat(random.randint(0,10,(4,3)))
#产生一个2*2的对角矩阵
data6=mat(eye(2,2,dtype=int))
#生成一个对角线为1、2、3的对角矩阵
a1=[1,2,3];
a2=mat(diag(a1))
2常见矩阵运算
-矩阵相乘
#1×2的矩阵乘以2×1的矩阵,得到1×1的矩阵
#使用matrix,运算符*用于矢量计算(叉乘),若是array,运算符*是数量积(点乘)
#另外可用np.dot()函数计算叉乘
a1=mat([1,2])
a2=mat([[1],[2]])
a3=a1*a2
说白了就是1×1+2×2=5。
-矩阵点乘
矩阵对应元素相乘:
a1=mat([1,2])
a2=mat([1,2])
a3=multiply(a1,a2)
输出:matrix([[1, 4]])
-矩阵求逆和转置
#求逆
a1=mat(random.randint(0,10,(4,4)))
a2=a1.I
#转置
a1.T
-计算矩阵对应行列的最大、最小值、和
a1=mat(random.randint(0,10,(4,4)))
#列和,这里得到的是1*2的矩阵
a2=a1.sum(axis=0);
#行和,这里得到的是3*1的矩阵
a3=a1.sum(axis=1);
#计算第二行所有列的和(Python从0开始计数)),这里得到的是一个数值
a4=sum(a1[1,:]);
#计算最大、最小值和索引
#先用python内置函数
#计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
a1.max()
#计算第二列的最大值,这里得到的是一个1*1的矩阵
a2=max(a1[:,1])
#计算第二行的最大值,这里得到的是一个一个数值
a1[1,:].max()
#使用numpy函数
#计算所有列的最大值,这里使用的是numpy中的max函数,返回每列的最大值,返回值是一个行矩阵
np.max(a1,0)
#计算所有行的最大值,返回每列最大值,返回值也是一个矩阵,且是一个列矩阵
np.max(a1,1)
#计算所有列的最大值对应在该列中的索引,返回行矩阵及其数据类型
np.argmax(a1,0)
#计算所有行的最大值对应在该行的索引,返回一个列矩阵及其数据类型
np.argmax(a1,1)
#但若这么写,便是计算第二行中最大值对应在改行的索引,返回索引值
np.argmax(a1[1,:])
3 矩阵合并与分解
分割:
a=mat(random.randint(0,10,(4,4)))
#分割第二行第二列后的所有元素
b=a[1:,1:]
合并有俩种方式,按行和按列:
a=mat(ones((3,3))
b=mat(random.randint(0,10,(3,3)))
#按列增加,在列后面合并后增加了行数
c=vstack((a,b))
#按航增加,在行后面增加了列数
d=hstack((a,b))
参考博客: