从symarray对索引求和

2024-04-26 22:45:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过对张量中的索引求和来创建一个符号表达式。对于矩阵/2D张量,这非常简单:

from sympy import *

Q = MatrixSymbol('Q', 2,2)

i,j = symbols('i j')
summation(summation(Q[i,j],(i,0,2)),(j,0,2))

当我试图研究四阶张量时,我遇到了问题。我的尝试是:

^{pr2}$

任何帮助都将不胜感激。在


Tags: fromimport表达式符号矩阵symbolssympysummation
1条回答
网友
1楼 · 发布于 2024-04-26 22:45:42

C = sym.symarray('C', (2,2,2,2))使C成为一个由多个SymPy符号组成的数组。 由于C本身不是一个SymPy符号,当遇到符号索引(如C[i,j,k,l])时,NumPy就会犹豫。在

要解决此问题,请使C成为一个SymPy NDimArray:

C = sym.tensor.Array(C)

^{pr2}$

收益率

C_0_0_0_0*Q[0, 0] + C_0_0_0_1*Q[0, 0] + C_0_0_1_0*Q[0, 0] + C_0_0_1_1*Q[0, 0] + C_0_1_0_0*Q[0, 1] + C_0_1_0_1*Q[0, 1] + C_0_1_1_0*Q[0, 1] + C_0_1_1_1*Q[0, 1] + C_1_0_0_0*Q[1, 0] + C_1_0_0_1*Q[1, 0] + C_1_0_1_0*Q[1, 0] + C_1_0_1_1*Q[1, 0] + C_1_1_0_0*Q[1, 1] + C_1_1_0_1*Q[1, 1] + C_1_1_1_0*Q[1, 1] + C_1_1_1_1*Q[1, 1]

{<7}。 换句话说,与Python的半开放范围不同符号总和 范围包括两端。在

C = sym.symarray('C', (2,2,2,2))创建一个四维数组,每个维度的长度为2。因此C只能用0和1索引,而不能用2建立索引。因此,为了避免索引超出范围误差:

ValueError: Index [0, 0, 2, 0] out of border

使用sym.summation(..., (i,0,1))。在

相关问题 更多 >