numpy介绍——numpy的矩阵运算(7)

上一节介绍了如果生成矩阵,这一节将介绍关于矩阵的各种运算

当然在开始之前,不要忘记导入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里矩阵的其他操作

谢谢~







猜你喜欢

转载自blog.csdn.net/weixin_38774821/article/details/80935194