如何在SymPy中定义很多符号

时间:2018-03-12 01:09:54

标签: sympy repeat symbols

我试图在" sympy"中定义很多变量。用于符号处理。

import sympy as sp
b_0=sp.symbols('b_0')
b_1=sp.symbols('b_1')
...
b_X=sp.symbols('b_X')

等等,X从1到1000。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

有几个选择:

>>> 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)

或使用格式化字符串

>>> 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)

这些返回一个符号元组。还有更多格式选项:请参阅symbols docs

还有一个生成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)

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

最后,如果您需要一个大小不确定的符号数组,则会有Indexed objects:当您使用A[n]表示法作为IndexedBase使用A表示法时,会立即创建索引对象。

答案 1 :(得分:0)

如果您仍然希望能够调用单个符号,例如 b_0

因为:

from sympy import symbols

# Number of symbols you need
X = 5

b = symbols(f"b_0:{X}")
>>> b
(b_0, b_1, b_2, b_3, b_4)

>>> b_0
NameError: name 'b_0' is not defined

您可以通过字典将它们添加到局部变量中:

from sympy import symbols

# Number of symbols you need
X = 5

# To still have b[i]
b = symbols(f"b_0:{X}")

b_dict = {f"b_{i}": b[i] for i in range(X)}
locals().update(b_dict)