import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
1. 错误方法
a*b
array([ 5, 12, 21, 32])
a@b
70
因为在numpy中,array([1, 2, 3, 4])
既是行向量也是列向量。
符号*
表示逐个元素相乘。
numpy.dot()
和符号@
表示矩阵乘法,但是它们会自动把参与矩阵乘法的两个array变成第一个为行向量,第二个为列向量的形式进行相乘。
2. 正确方法
2.1 方法1:矩阵外积
函数np.outer()
为矩阵的外积运算。
np.outer(a, b)
array([[ 5, 6, 7, 8],
[10, 12, 14, 16],
[15, 18, 21, 24],
[20, 24, 28, 32]])
2.2 方法2:将向量转换为二维数组
- 将a和b都变成二维数组然后再使用符号
@
做矩阵乘法
a.reshape(len(a), 1) @ b.reshape(1, len(b))
array([[ 5, 6, 7, 8],
[10, 12, 14, 16],
[15, 18, 21, 24],
[20, 24, 28, 32]])
- 将a和b都变成二维数组然后再使用
np.matmul
方法做矩阵乘法
np.matmul(a.reshape(len(a), 1), b.reshape(1, len(b)))
array([[ 5, 6, 7, 8],
[10, 12, 14, 16],
[15, 18, 21, 24],
[20, 24, 28, 32]])
- 将a和b都变成二维数组然后再使用
np.dot()
方法做矩阵乘法
np.dot(a.reshape(len(a), 1), b.reshape(1, len(b)))
array([[ 5, 6, 7, 8],
[10, 12, 14, 16],
[15, 18, 21, 24],
[20, 24, 28, 32]])