gpt4 book ai didi

python - 在 SymPy 中打印四舍五入到 3 位小数的输出

转载 作者:行者123 更新时间:2023-11-28 22:21:12 27 4
gpt4 key购买 nike

我得到了一个 SymPy 矩阵 M

In [1]: from sympy import *
In [2]: M = 1/10**6 * Matrix(([1, 10, 100], [1000, 10000, 100000]))
In [3]: M
Out[3]:
Matrix([
[1.0e-6, 1.0e-5, 0.0001],
[ 0.001, 0.01, 0.1]])

我想打印四舍五入到 3 位小数的输出,如下所示:

In [3]: M
Out[3]:
Matrix([
[ 0.000, 0.000, 0.000],
[ 0.001, 0.010, 0.100]])

在普通的 Python 中,我会这样做:

In [5]: '{:.3f}'.format(1/10**6)
Out[5]: '0.000'

但是在 SymPy 矩阵中如何做呢?

此外,更一般的情况是表达式也包含符号

x = symbols('x')
M = 1/10**6 * Matrix(([1, 10*x, 100], [1000, 10000*x, 100000]))

首选输出是

In [3]: M
Out[3]:
Matrix([
[ 0.000, 0.000*x, 0.000],
[ 0.001, 0.010*x, 0.100]])

最佳答案

要舍入表达式中的每个数字,请使用以下函数

def round_expr(expr, num_digits):
return expr.xreplace({n : round(n, num_digits) for n in expr.atoms(Number)})

它可以应用于任何 SymPy 表达式,包括矩阵。

x = symbols('x')
M = 1/10**6 * Matrix(([1, 10*x, 100], [1000, 10000*x, 100000]))
round_expr(M, 3)

产量

Matrix([
[ 0.0, 0, 0.0],
[0.001, 0.01*x, 0.1]])

对于数字矩阵,以下更简单并保留尾随零:

>>> M.applyfunc(lambda x: Symbol('{:.3f}'.format(x)))
Matrix([
[0.000, 0.000, 0.000],
[0.001, 0.010, 0.100]])

此处,applyfunc 将给定的函数应用于 M 的每个条目。尝试的自然做法是 lambda x: '{:.3f}'.format(x) 但 SymPy 矩阵并不是真正用来保存字符串:字符串被解析回数字并且尾随零被丢弃,导致

Matrix([
[ 0.0, 0.0, 0.0],
[0.001, 0.01, 0.1]])

所以我将每个字符串包装在 Symbol 中,从而从中创建一个新符号。符号可以出现在矩阵中,并打印为它们的名称,在这种情况下名称为“0.000”等。

关于python - 在 SymPy 中打印四舍五入到 3 位小数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48491577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com