小编use*_*647的帖子

Python中的特殊张量收缩

我需要执行一种特殊类型的张量收缩.我想要这样的东西:

A_ {bg} = Sum_ {a,a',a''}(B_ {a} C_ {a'b} D_ {a''g})

其中所有指数可以有超过一个,一个值0,1和总和 '和 '' 进行对所有情况,其中A + A '+ A''= 1或A + A '+ A'" = 2.所以它就像爱因斯坦求和公约的反面:我只想在三个指数中的一个与其他指数不同时求和.

此外,我要一些挠性与不被求和索引的数目:在本例中得到的张量具有2个索引,并且总和是在3张量,一个带一个索引元件的产品的另外两个与两个索引.这些索引的数量会有所不同,所以一般来说我希望能写出这样的东西:

A _ {...} = Sum_ {a,a',a''}(B_ {a ...} C_ {a ...} D_ {a''...}})

我想指出索引的数量不是固定的,但是它是受控制的:我可以知道并指定每个张量中每个张量有多少个索引.

我试过np.einsum(),但显然我被迫在标准的爱因斯坦惯例中总结重复的指数,我不知道如何实现我在这里暴露的条件.

而且我不能用各种各样的东西写出来,因为正如我所说,所涉及的张量的索引数量并不固定.

有人有想法吗?


来自评论:

我会像这样编写我在这里编写的语言:

tensa = np.zeros((2,2))
for be in range(2):
    for ga in range(2):
        for al in range(2):
            for alp in range(2):
                for alpp in range(res(al,alp),prod(al,alp)):
                    tensa[be,ga] += tensb[al] * tensc[alp,be] * tensd[alpp,ga] …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra

2
推荐指数
1
解决办法
1240
查看次数

标签 统计

linear-algebra ×1

numpy ×1

python ×1