对多个值集合进行链式矩阵乘法应用

1 投票
1 回答
42 浏览
提问于 2025-04-13 14:57

我想用数学的方法来计算 x^T A x,其中 x 是一个n维的坐标,A 是一个n维的方阵。不过,我希望能高效地计算一组坐标的这个值。比如,在二维的情况下:

import numpy as np
x = np.column_stack([[1,2,3,4,5],[6,7,8,9,0]])
A = np.array([[1,0],[0,2]])

print(x[0] @ A @ x[0])  # works
# How can I get efficiently an array of x[i] @ A @ x[i]?
y = [x[i] @ A @ x[i] for i in range(x.shape[0])]

1 个回答

2

这就是你想要的吗?

>>> (x @ A @ x.T).diagonal()
array([ 73, 102, 137, 178,  25])

或者也许是:

>>> (x @ A * x).sum(axis=1)
array([ 73, 102, 137, 178,  25])

这是一个很好的einsum建议,来自评论中的hpaulj

>>> np.einsum('ij,jk,ik->i', x, A, x)
array([ 73, 102, 137, 178,  25])

撰写回答