【问题标题】:How to define a lot of symbols in SymPy如何在 SymPy 中定义很多符号
【发布时间】:2018-03-12 01:09:53
【问题描述】:

我试图在“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。

有什么简单的方法吗?

【问题讨论】:

    标签: sympy repeat symbols


    【解决方案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] 表示法和A 作为IndexedBase 时,会即时创建索引对象。

    【讨论】:

    • 感谢您的回复! sp.symarray('A',10) B=sp.diff(A,A_1) 当我尝试这个时,它说 A_1 未定义。其他方法也说 A_1 未定义。我正在寻找一种方法让 python 2.7 承认创建的变量。
    • 这些应该分配给某些东西。我编辑了答案。注意 Python 变量名和 SymPy 符号名之间的区别。
    【解决方案2】:

    如果您仍然希望能够调用个人符号,例如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)
    

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2015-01-26
      • 2016-01-01
      • 1970-01-01
      相关资源
      最近更新 更多