我正在尝试计算 numpy 中张量之间的内积。
我有一个形状的向量和一个形状的张量并想计算。也就是说,我想计算总和(n,)d*(n,)d > 1
我有一个工作实现使用一个函数来首先计算然后使用:np.tensordot
def d_fold_tensor_product(x, d) -> np.ndarray:
"""
Compute d-fold tensor product of a vector.
"""
assert d > 1, "Tensor order must be bigger than 1."
xd = np.tensordot(x, x, axes=0)
for _ in range(d-2):
xd = np.tensordot(xd, x, axes=0)
return xd
n = 10
d = 4
x = np.random.random(n)
y = np.random.random(d * (n,))
result = np.tensordot(y, d_fold_tensor_product(x, d), axes=d)
有没有更高效和 Pythonic 的方式?也许不必计算。