如何在 Python 中使用 @ 将列向量与行向量相乘?
How do you multiply a column vector with a row vector using @ in Python?
我是运行以下Python代码:
import numpy as np
a=np.array([1,2])
b=np.array([3,4])
a@b #11
a.T@b #11
a@b.T #11
a.T@b.T #11
所有四个运算都给出了点积。据我了解,a
和 b
将是行向量,因此 a.T@b
将给出一个 2x2 矩阵。我在这里误解了什么以及如何将 a
的列向量与 b
的行向量矩阵相乘?
您需要使用二维数组来表示matrices/matrix乘法。
a = np.array([[1, 2]])
b = np.array([[3, 4]])
print(a.T @ b)
您在这里看到的是 属性 numpy 数组和矩阵的工作原理。
您已经创建了 numpy 数组,每个数组的长度为 2,如果您将其转置,您仍然会得到一个长度为 2 的数组。如果您执行 a.shape
,就会看到这一点。您必须创建一个 1x2 矩阵,它将按预期工作:
>>> a=np.array([[1,2]])
>>> b=np.array([[3,4]])
>>> a@b
Error
>>> a.T@b
array([[3, 4],
[6, 8]])
>>> a@b.T
array([[11]])
>>> a.T@b.T
Error
可以用np.outer得到外积
>>> import numpy as np
>>> a=np.array([1,2])
>>> b=np.array([3,4])
>>> np.outer(a, b)
array([[3, 4],
[6, 8]])
首先,重要的是要了解您的 a
和 b
既不是行也不是列。它们是一维的。
矩阵乘法只有效,因为 @
特殊对待一维操作数。在左边,它们将隐式地成为一行,在右边成为一列。添加的维度将从结果中删除。所以a@b给出了内积。
a@b
# 11
对于外积,我们需要构建二维向量。
将两个一维向量转换为一列和一行的便捷方法是 np.ix_
:
ac,br = np.ix_(a,b)
ac@br
# array([[3, 4],
# [6, 8]])
我是运行以下Python代码:
import numpy as np
a=np.array([1,2])
b=np.array([3,4])
a@b #11
a.T@b #11
a@b.T #11
a.T@b.T #11
所有四个运算都给出了点积。据我了解,a
和 b
将是行向量,因此 a.T@b
将给出一个 2x2 矩阵。我在这里误解了什么以及如何将 a
的列向量与 b
的行向量矩阵相乘?
您需要使用二维数组来表示matrices/matrix乘法。
a = np.array([[1, 2]])
b = np.array([[3, 4]])
print(a.T @ b)
您在这里看到的是 属性 numpy 数组和矩阵的工作原理。
您已经创建了 numpy 数组,每个数组的长度为 2,如果您将其转置,您仍然会得到一个长度为 2 的数组。如果您执行 a.shape
,就会看到这一点。您必须创建一个 1x2 矩阵,它将按预期工作:
>>> a=np.array([[1,2]])
>>> b=np.array([[3,4]])
>>> a@b
Error
>>> a.T@b
array([[3, 4],
[6, 8]])
>>> a@b.T
array([[11]])
>>> a.T@b.T
Error
可以用np.outer得到外积
>>> import numpy as np
>>> a=np.array([1,2])
>>> b=np.array([3,4])
>>> np.outer(a, b)
array([[3, 4],
[6, 8]])
首先,重要的是要了解您的 a
和 b
既不是行也不是列。它们是一维的。
矩阵乘法只有效,因为 @
特殊对待一维操作数。在左边,它们将隐式地成为一行,在右边成为一列。添加的维度将从结果中删除。所以a@b给出了内积。
a@b
# 11
对于外积,我们需要构建二维向量。
将两个一维向量转换为一列和一行的便捷方法是 np.ix_
:
ac,br = np.ix_(a,b)
ac@br
# array([[3, 4],
# [6, 8]])