上一节介绍了如果生成矩阵,这一节将介绍关于矩阵的各种运算
当然在开始之前,不要忘记导入numpy的包(此处不再导入,之前已经导入过了~)
首先生成一个矩阵
#创建2行4列的矩阵
a=np.array([[1,2,3,4],[5,6,7,8]])
a
输出:
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
试一试乘法吧
# 矩阵乘法,各个项直接相乘
a*3
输出:
array([[ 3, 6, 9, 12],
[15, 18, 21, 24]])
加法呢?
a+a
输出:
array([[ 2, 4, 6, 8],
[10, 12, 14, 16]])
那两个不同的矩阵相乘呢?我们来做一个array A和一个array B
A=np.array([[1,3],[0,1]])
B=np.array([[2,2],[3,4]])
A
输出:
array([[1, 3],
[0, 1]])
B
输出:
array([[2, 2],
[3, 4]])
接下来直接用A*B来看看结果
# A和B的对应位置相乘,好像不满足我们要的效果
A*B
输出:
array([[2, 6],
[0, 4]])
直接用A*B,得到的结果为两个矩阵的对应元素进行相乘,但并不是真正的矩阵乘法
要做矩阵乘法,我们要借助 dot()函数
#使用 A.dot(B)真正的矩阵相乘结果了
A.dot(B)
输出:
array([[11, 14],
[ 3, 4]])
这样就对了~~
之前有提到,用random可以得到一个矩阵,元素为0到1之间的随机数
比如这样
# 使用np.random.random得到的都是正数,范围0到1
a=np.random.random([3,3])
a
输出:
array([[0.18389136, 0.00354987, 0.74766837],
[0.06473866, 0.46857438, 0.08283646],
[0.00428659, 0.82442847, 0.62565717]])
但是如果我希望得到的元素里,有正有负的话,需要一点点修改
# 使用np.random.randn可以得到负数,范围-1到1
np.random.randn(3,3)
输出:
array([[-1.12287958, 1.11566799, 0.22752506],
[-1.05871518, 0.23202916, -0.10763165],
[ 0.71459927, -0.74815871, 1.78483544]])
这样就对了~
当然我们也可以直接对矩阵进行非常简单的函数运算,比如求和啊,求最小值啊等等
a.sum()
a.min()
a.max()
输出:
3.0056313335177762
0.0035498686584025663
0.8244284661711635
那么我们要创造一个元素为连续数字的array呢?
# 使用arange(24)创造数列,意为从0到23。
# 用reshape(6,4)意为6行4列的矩阵
b=np.arange(24).reshape(6,4)
b
输出:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
现在我们有了这样一个array,从0到23。我们现在要对这个矩阵的第一列数进行操作(0,4,8,12,16,20),我们需要借助axis。
注意:关于axis,axis=0 是沿着每一行进行操作,axis=1 是沿着每一列进行操作。
具体操作如下,假如我们求每一列的和,利用 sum()函数
#每一列的总和
b.sum(axis=0)
输出:
array([60, 66, 72, 78])
#每一行的总和
b.sum(axis=1)
array([ 6, 22, 38, 54, 70, 86])
同理,可以求得每一行的最小值或者每一列的最大值
b.min(axis=0)
b.max(axis=1)
输出:
array([0, 1, 2, 3])
array([ 3, 7, 11, 15, 19, 23])
现在重新看一下b这个array
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
生成一个累加的矩阵
# 利用cumsum做累加,输出值矩阵的每一行的值,为输出前的矩阵每一行进行累加的结果
b.cumsum(axis=1)
输出:
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38],
[12, 25, 39, 54],
[16, 33, 51, 70],
[20, 41, 63, 86]], dtype=int32)
关于基础的array运算先告一段落啦,下一节还有继续介绍numpy里矩阵的其他操作
谢谢~