我正在尝试为高阶(d=4)因式分解机编写python代码,该机器返回y的标量结果
其中x是长度为n的向量,v是长度为n的向量,w是大小为n×n的上三角矩阵,t是大小为n×n×n×n的秩4张量。最简单的实现仅适用于每个索引上的循环:
for i in range(0,len(x)):
for j in range(0,len(x)):
for k in range(0,len(x)):
for l in range(0,len(x)):
y += t[i,j,k,l] * x[i] * x[j] * x[k] * x[l]
前两项易于计算:
y = u @ x + x @ v @ x.T
我的问题-有没有比嵌套for循环更好的方法来计算张量和?(目前正在pytorch中寻找可能的解决方案)
谢谢你swag2198
在对x和t的伪值进行测试时,返回与for循环相同的结果
这似乎非常适合^{} :
在展开形式中,它看起来像
torch.einsum('ijkl,i,j,k,l->', t, x, x, x, x)
,并计算由四个for
循环定义的值:其中
cartesian_prod
是笛卡尔积:range(len(x))^4
相关问题 更多 >
编程相关推荐