如何在 SymPy 中定义大量符号

sto*_*120 10 symbols repeat sympy

我试图在“sympy”中定义很多变量以进行符号处理。

import sympy as sp

b_0 = sp.symbols('b_0')
b_1 = sp.symbols('b_1')
...
b_X = sp.symbols('b_X')
Run Code Online (Sandbox Code Playgroud)

依此类推,X从 1 到 1000。

有简单的方法吗?

小智 10

有以下几种选择:

>>> sp.symbols('b_0:10')
(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9)
Run Code Online (Sandbox Code Playgroud)

或者,使用格式化字符串,

>>> n = 10
>>> sp.symbols('b_0:{}'.format(n))
(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9)
Run Code Online (Sandbox Code Playgroud)

它们返回一个符号元组。还有更多格式选项:请参阅symbols文档

还有一个函数可以生成 NumPy 符号数组:

>>> sp.symarray('b', 10)
array([b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9], dtype=object)
Run Code Online (Sandbox Code Playgroud)

所有这些例子都是为了分配给某些东西。例如,b = sp.symbols('b_0:10')将符号元组分配给 b,因此它们可以作为 等进行访问b[0], b[1]。SymPy 符号不能通过表示它们的字符串进行访问,例如"b_0" or "b_1"


最后,还有索引对象,以防您需要未确定大小的符号数组:当您使用作为 IndexedBase 的A[n]符号时,会动态创建索引对象。A