python - 如何使 sympy 打印 O(2**n) 而不是 O(exp(n*log(2)))

标签 python big-o sympy

我正在使用 SymPy order 库尝试一些东西并发现以下方程式:

O(2**n, (n, oo))

输出将为O(exp(n*log(2)))

有没有办法让 SymPy 输出 O(2**n) 而不是 O(exp(n*log(2)))

最佳答案

你可以用它来伪造它

>>> o = O(2**n, (n, oo))
>>> Function("O")(*map(simplify,o.args))
O(2**n, (n, oo))

但是,如果您希望能够以这种方式打印它,那么您似乎必须创建一个自定义打印机以允许以这种方式打印它。如果您执行 o.func(*map(...)) - 即使使用 evaluate=False - 它也会恢复为 exp > 形式,因此这似乎被硬编码为 O 想要显示内容的方式。可能值得提出一个关于是否应该使用 O 添加/遵守 evaluate 关键字的问题。

关于python - 如何使 sympy 打印 O(2**n) 而不是 O(exp(n*log(2))),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998251/

相关文章:

python - pandas.DataFrame.dtypes 返回的所有可能的数据类型的列表

algorithm - 选择算法中的 good pivot VS "bad pivot"有什么区别?

java - 如何在 Big-O(N) 时间内将 3 个排序数组合并为 1 个排序数组?

python - 对角化符号矩阵

python - 将 MATLAB 函数移植到 Scilab。我如何使用符号?

python - 在python中输入多行字符串

python - X 轴上日历周 YYYYWW 的 Seaborn 多线图

python - fill_between 总是低于绘图线

java - 内存斐波那契码的空间复杂度

python - 函数矩阵、SymPy 和 SciPy 的数值积分