在线性代数中执行点积和向量表示时,在形状方面,我很难匹配 Numpy 的期望。
假设我有一个矩阵和两个由 Numpy 数组表示的列向量:
import numpy as np
A = np.array([[1,2],
[3,1],
[-5,2]])
x = np.array([[0],
[2]])
y = np.array([[-2],
[0],
[3]])
我想计算
Axꞏy
,Ax
是矩阵乘法,ꞏ
是点积。这不起作用:
# a = Axꞏy
a = (A @ x).dot(y)
形状 (3,1) 和 (3,1) 未对齐:1 (dim 1) != 3 (dim 0)
Ax
:
[[4],
[2],
[4]]
确实是一个列向量,两个列向量的点积是标量:
-8+0+12=4
,这就是我期待的结果。
使用定义的向量所需的正确操作或重塑是什么?
您无法计算两个
(3, 1)
数组之间的点积,仅当 A @ B
和 A
的形状分别为 B
和 (n, k)
时,点积 (k, m)
才有效。
也许你想要:
(A@x).T @ y
[[4]]
或者:
(A@x) @ y.T
array([[-8, 0, 12],
[-4, 0, 6],
[-8, 0, 12]])
或者:
(A.T*x) @ y
array([[0],
[4]])
注意。在 2D 数组的上下文中
@
和 dot
是等效的。