Numpy 和线性代数:如何编写 Axꞏy 代码?

问题描述 投票:0回答:1

在线性代数中执行点积和向量表示时,在形状方面,我很难匹配 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
,这就是我期待的结果。

使用定义的向量所需的正确操作或重塑是什么?

python numpy linear-algebra
1个回答
1
投票

您无法计算两个

(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
是等效的。

© www.soinside.com 2019 - 2024. All rights reserved.