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

9fkzdhlc  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(105)

我在匹配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ꞏyAx是一个矩阵乘法,是点积。这是行不通的:

# 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,这是我期望的结果。
使用定义的矢量,需要什么样的正确操作或整形?

tyky79it

tyky79it1#

你不能计算两个(3, 1)数组之间的点积,只有当AB的形状是(n, k)(k, m)时,点积A @ B才有效。
看起来你想要:

(A@x).T @ y

字符串
输出:[[4]]
或标量:

((A@x).T @ y).item()


输出:4

  • 注:在二维数组的上下文中,@dot是等效的。*

在给定形状的情况下,其他有效的操作:

(A@x) @ y.T

array([[-8,  0, 12],
       [-4,  0,  6],
       [-8,  0, 12]])

(A.T*x) @ y

array([[0],
       [4]])

相关问题