在python中有效地计算三阶张量

问题描述 投票:1回答:1

如果x表示d维列向量而e_i表示欧几里得空间i中的R^dth标准基础,我想以有效的方式计算python中的以下三阶张量:

enter image description here

这里,圆圈交叉是指张量外部产品。目前我一直依赖以下相当低效的代码:

import numpy as np
from sktensor import ktensor,dtensor

d=5
x= np.random.normal(0,1,(d,1))

z= np.zeros((d,1))
I= np.identity(d)

T1= ktensor([x,x,x])
T2= ktensor([z,z,z])
T3= ktensor([z,z,z])
T4= ktensor([z,z,z])

for j in range(d):
    T2 = T2+ ktensor([I(:,j),I(:,j),x]
    T3 = T3+ ktensor([I(:,j),x,I(:,j)]
    T4 = T4+ ktensor([x,I(:,j),I(:,j)]

T= T1-T2-T3-T4
python scikit-learn tensor
1个回答
1
投票

根据OP的评论要求,numpy回答。未针对sktensor进行测试

import numpy as np
np.random.seed(42)
d = 5
x = np.random.normal(0,1, size=(d,1))
I = np.identity(d)

ans = np.outer(x, np.outer(x, x))
for i in range(d):
    ans -= np.outer(I[:, i], np.outer(I[:, i], x))
    ans -= np.outer(I[:, i], np.outer(x, I[:, i]))
    ans -= np.outer(x, np.outer(I[:, i], I[:, i]))
© www.soinside.com 2019 - 2024. All rights reserved.