Python 矩阵操作

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))

参考博客:

https://blog.csdn.net/wuxiaosi808/article/details/78212433

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值