转载自: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]]