向量中第一阶张量的张量点积

数据挖掘 Python 麻木的
2022-02-26 17:05:48

我正在尝试计算 numpy 中张量之间的内积。

我有一个形状的向量和一个形状张量想计算也就是说,我想计算总和x(n,)yd*(n,)d > 1y,xd

y,xd=i1,,id{1,,n}y[i1,,id]x[i1]x[id].

我有一个工作实现使用一个函数来首先计算然后使用xdnp.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 的方式?也许不必计算xd

1个回答

也许效率不高,但更短:

r=y
for i in range(d):
    r=r @ x