python中矩阵与数组相乘的问题

np.dot(数组,矩阵)和np.dot(矩阵,数组)等矩阵与数组相乘的问题

1、 np.dot(数组,矩阵)

import numpy as np
A = np.array([6,7,8])
B = np.array([[1,2], [3, 4], [5,6]])
print(A.shape)
print(B.shape)
print(np.dot(A,B).shape)
print(np.dot(A,B))

结果为:
在这里插入图片描述
小结:A为3个元素的数组(注意不是矩阵!),且元素个数为3
B为3x2矩阵,np.dot(A,B)得到的为一个元素个数为2的数组。

2、 np.dot(矩阵,数组):

import numpy as np
A = np.array([[1, 2], [3, 4], [5, 6]])
B = np.array([7, 8])
print(A.shape, B.shape)
print(np.dot(A, B).shape)
print(np.dot(A, B))

结果为:
在这里插入图片描述
小结:A为3x2矩阵,B为2个元素的数组,np.dot(A,B)得到的为一个元素个数为3的数组。

结论:

  • 在python中,矩阵与数组采用np.dot()计算时,所得结果均为一个数组
  • 数组在前时,可按照将数组看成1行n列的矩阵,与矩阵相乘,可得计算结果。但需注意计算结果依然只是数组,及其shape为(k,)形式,而不是(1,k);
  • 数组在后时,将矩阵的行与数组分别进行数量积相乘,所得结果组成的向量即为所得结果。即1x7+2x8=23,3x7+4x8=53, 5x7+6x8=83,组成数组[23,53,83]。
  • [23,53,83]是一个数组,它的shape为(3,)
  • [ [23,53,83] ]是一个矩阵,它的shape是(1,3)
  • 只有[ [23],[53],[83] ]才是一个列向量

在python中,数组和矩阵相乘与我们在线性代数中将向量看成一个列向量的思路是非常不同的,在python中数组的储存是按行存储的(在C语言,matlab中也是按行存储)。 根据吴恩达老师的建议,他在搭建神经网络时,一般不用数组,而是把数组通过reshape()函数转化为矩阵,以减少出错的可能性

猜你喜欢

转载自blog.csdn.net/qq_45652492/article/details/124035317