numpy之python矩阵(mat)操作

转载自:https://blog.csdn.net/qq_38150441/article/details/79893747,本文只做个人记录学习使用,版权归原作者所有。

1.numpy的导入和使用

from numpy import * #导入numpy的库函数
import numpy as np 

2.矩阵的创建

from numpy import *

a1=array([1,2,3])

#输出结果如下:
[1,2,3]

a1=mat(a1)
#输出结果如下
[[1,2,3]]

shape(a1)
#输出结果如下
(1,3)

创建常见的矩阵

data1=mat(zeros((3,3))) #创建一个3x3的零矩阵,矩阵这里zeros函数的参数是一个tuple类型(3,3)
#输出结果如下
[[0,0,0],
 [0,0,0],
 [0,0,0]]

#创建一个2x4的1矩阵,默认是浮点型的数据,如果需要int类型,则可以使用dtype=int
data2=mat(ones((2,4))) 
#输出结果如下
[[1.,1.,1.,1.],
 [1.,1.,1.,1.,]]

#生成随机矩阵,这里的random模块使用的是numpy中的random模块,random.rand(2,2)创建的是一个
#二维数组,需要将其转换成matrix
data3=mat(random.rand(2,2)) 

#生成1个3x3的0-10之间的随机整数矩阵,如果需要指定下界则可以多加一个参数
data4=mat(random.randint(10,size=(3,3)))

#生成1个2-8之间的随机整数矩阵
data5=mat(random.randint(2,8,size(2,5)))

#生成1个2x2的对角矩阵
data6=mat(eye(2,2,dtype=int))

#生成一个对角线为1,2,3的对角矩阵
a1=[1,2,3]
a2=mat(diag(a1))

3.常见的矩阵运算

(1)矩阵相乘

a1=mat([1,2])
a2=mat([[1],[2]])
a3=a1*a1

#输出结果如下
[[5]]

(2)矩阵点乘

a1=mat([1,1])
a2=mat([2,2])
a3=multiply(a1,a2)
print(a3)

#输出结果如下:
[[2 2]]

(3)矩阵求逆、转置

a1=mat(eye(2,2)*0.5)
print(a1)

#输出结果如下:
[[0.5,0.],
 [0. 0.5]]

a2=a1.I #求矩阵a1的逆矩阵
print(a2)
#输出结果如下
[[2.,0.]
 [0. 2.]]

矩阵转置

a1=mat([[1,1],[0,0]])
print(a1)

#输出结果如下
[[1,1],
 [0,0]]

a2=a1.T
print(a2)
[[1,0],
 [1,0]]

(4)计算矩阵对应行列的最大最小值、和

a1=mat([[1,1],[2,3],[4,2]])
print(a1)

#输出结果如下
[[1,1]
 [2,3]
 [4,2]]

#计算每一个行列的和
a2=a1.sum(axis=0)#列和,这里得到的是1x2的矩阵
print(a2)
#输出结果如下
[[7,6]]

a3=a1.sum(axis=1)#行和,这里得到的是3x1的矩阵
print(a3)
#输出结果如下
[[2],
 [5],
 [6]]

a4=sum(a1[1,:]) #计算第一行所有列的和,这里得到的是一个数值
print(a4)
#输出结果如下
5

计算最大值、最小值和索引

>>>a1.max()   #计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
4
>>>a2=max(a1[:,1]) #计算第二列的最大值,这里得到的是一个1*1的矩阵
>>> a2
matrix([[3]])
>>>a1[1,:].max()  #计算第二行的最大值,这里得到的是一个一个数值
3
>>>np.max(a1,0)  #计算所有列的最大值,这里使用的是numpy中的max函数
matrix([[4, 3]])
>>>np.max(a1,1)  #计算所有行的最大值,这里得到是一个矩阵
matrix([[1],
        [3],
        [4]])
>>>np.argmax(a1,0) #计算所有列的最大值对应在该列中的索引
matrix([[2, 1]])
>>>np.argmax(a1[1,:])  #计算第二行中最大值对应在该行的索引
1

5.矩阵的分割和合并

矩阵的分隔,同列表和数组的分隔一致

>>>a=mat(ones((3,3)))
>>> a
matrix([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])
>>>b=a[1:,1:]  #分割出第二行以后的行和第二列以后的列的所有元素
>>> b
matrix([[ 1.,  1.],
        [ 1.,  1.]])

矩阵的合并

>>>a=mat(ones((2,2)))
>>> a
matrix([[ 1.,  1.],
        [ 1.,  1.]])
>>>b=mat(eye(2))
>>> b
matrix([[ 1.,  0.],
        [ 0.,  1.]])
>>>c=vstack((a,b))  #按列合并,即增加行数
>>> c
matrix([[ 1.,  1.],
        [ 1.,  1.],
        [ 1.,  0.],
        [ 0.,  1.]])
>>>d=hstack((a,b))  #按行合并,即行数不变,扩展列数
>>> d
matrix([[ 1.,  1.,  1.,  0.],
        [ 1.,  1.,  0.,  1.]])

4.矩阵、列表和数组的转换

列表可以修改,并且列表中的元素可以使用不同类型的数据

l1=[[1],'hello',3]

numpy中数组,同一个数组中所有元素必须为同一个类型,有几个常见的属性

a=array([[2],[1]])
print(a)
#输出结果如下:
[[2],
 [1]]

dimension=a.ndim
print(dimension)

#输出结果如下
2

m,n=a.shape
print(m,n)
#输出结果如下
2 1

number=a.size #元素总个数
print(number)
#输出
2

str=a.dtype #元素的类型
print(str)

#输出结果如下
dtype('int64')

numpy中的矩阵也有与数组常见的几个属性

a1=[[1,2],[3,2],[5,2]] #列表
print(a1)

#输出结果如下
[[1,2],[3,2],[5,2]]

a2=array(a1) #将列表转换为二维数组
print(a2)
[[1,2],
 [3,2],
 [5,2]]

a3=mat(a1) #将列表转化为矩阵
print(a3)
#输出结果如下
[[1,2],
 [3,2],
 [5,2]]

a4=array(a3) #将矩阵转化为数组
print(a4)

#输出结果如下
[[1,2],
 [3,2],
 [5,2]]

a5=a3.tolist() #将矩阵转化为列表
print(a5)
#输出结果如下
[[1,2],[3,2],[5,2]]

a6=a2.tolist() #将数组转化为列表
print(a6)
#输出结果如下
[[1,2],[3,2],[5,2]]

这里可以发现三者之间的转换是非常简单的,但是需要注意的是,当列表是1维的时候,将它转化为数组和矩阵后,再通过tolist()转换成列表是不相同的,需要做一些小小的修改(可以发现,list转化为array不会增加维度,但是转换为mat会增加一层方括号)

import numpy as np
#from numpy import *

a1=[1,2,3]
print("a1:",a1)
a2=array(a1)
print("a2:",a2)

a3=mat(a1)
print("a3:",a3)

a4=a2.tolist()
print("a4:",a4)

a5=a3.tolist()
print("a5:",a5)

#输出结果如下
a1: [1, 2, 3]
a2: [1 2 3]
a3: [[1 2 3]]
a4: [1, 2, 3]
a5: [[1, 2, 3]]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值