2024-04-26 22:45:42 发布
网友
我试图通过对张量中的索引求和来创建一个符号表达式。对于矩阵/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))
当我试图研究四阶张量时,我遇到了问题。我的尝试是:
任何帮助都将不胜感激。在
C = sym.symarray('C', (2,2,2,2))使C成为一个由多个SymPy符号组成的数组。 由于C本身不是一个SymPy符号,当遇到符号索引(如C[i,j,k,l])时,NumPy就会犹豫。在
C = sym.symarray('C', (2,2,2,2))
C
C[i,j,k,l]
要解决此问题,请使C成为一个SymPy NDimArray:
C = sym.tensor.Array(C)
收益率
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))。在
sym.summation(..., (i,0,1))
C = sym.symarray('C', (2,2,2,2))
使C
成为一个由多个SymPy符号组成的数组。 由于C
本身不是一个SymPy符号,当遇到符号索引(如C[i,j,k,l]
)时,NumPy就会犹豫。在要解决此问题,请使
C
成为一个SymPy NDimArray:^{pr2}$
收益率
{<7}。
换句话说,与Python的半开放范围不同符号总和
范围包括两端。在
C = sym.symarray('C', (2,2,2,2))
创建一个四维数组,每个维度的长度为2。因此C
只能用0和1索引,而不能用2建立索引。因此,为了避免索引超出范围误差:使用
sym.summation(..., (i,0,1))
。在相关问题 更多 >
编程相关推荐