如何格式化 Python 中的复数
How to format complex number in Python
在我的 Python 行脚本中
result = sp.solve(eqn)
我得到以下格式类似于
的输出
result = 0.0100503358535014*I
我猜这意味着解是一个复数。所以在这种情况下它也可以看作是result = 0.01j
。
我想在我的代码中添加格式,以将 result = 0.0100503358535014*I
更改为更类似于 result = 0.01j
的内容。但是,我在尝试使用 isinstance
来检查 result
是否复杂
时发现了尝试执行此操作的问题
if isinstance(result, complex):
print "Result is complex!"
... my code here...
然而,此循环从未进入(即 0.0100503358535014*I
未被归类为复杂)。
我应该怎样写一个 if 语句来检查结果是否以 xxxxxxx*I
的方式正确给出?
以下检查 sympy 对象 result
是否表示复数并将浮点值截断为 2
小数点。
import sympy as sp
result = 0.0100503358535014*sp.I
print(result.is_complex)
print(sp.N(result,2))
True
0.01*I
SymPy 支持 Python 的内置函数 complex()
:
>>> import sympy
>>> x = sympy.sqrt(-2)
>>> x
sqrt(2)*I
>>> complex(x)
1.4142135623730951j
http://docs.sympy.org/latest/modules/evalf.html
中有一些例子
一个Python复数可以格式化为类似于浮点数:
>>> format(complex(x), 'e')
'0.000000e+00+1.414214e+00j'
>>> format(complex(x), 'f')
'0.000000+1.414214j'
>>> format(complex(x), 'g')
'0+1.41421j'
如果你想分别格式化实像部分,你可以自己做。
如果无法完成转换,将引发 TypeError:
>>> complex(sympy.Symbol('x'))
Traceback (most recent call last):
TypeError: can't convert expression to float
这里有一个替代方法,它顺便指出了如何检查复数的一个或两个部分是否可用。
>>> from sympy import *
>>> var('x')
x
>>> expr = (x+0.012345678*I)*(x-0.2346678934)*(x-(3-2.67893455*I))
>>> solve(expr)
[0.234667893400000, -0.012345678*I, 3.0 - 2.67893455*I]
>>> roots = solve(expr)
>>> for root in roots:
... r, i = root.as_real_imag()
... '%10.3f %10.3f i' % (r,i)
...
' 0.235 0.000 i'
' 0.000 -0.012 i'
' 3.000 -2.679 i'
您可以检查复杂部分的符号,以决定是否放置 plus 符号。我希望能够使用新奇的格式,但与Python TypeError: non-empty format string passed to object.__format__ 中提到的 Py3.4+ 自带的错误,我没有办法解决。
在我的 Python 行脚本中
result = sp.solve(eqn)
我得到以下格式类似于
的输出result = 0.0100503358535014*I
我猜这意味着解是一个复数。所以在这种情况下它也可以看作是result = 0.01j
。
我想在我的代码中添加格式,以将 result = 0.0100503358535014*I
更改为更类似于 result = 0.01j
的内容。但是,我在尝试使用 isinstance
来检查 result
是否复杂
if isinstance(result, complex):
print "Result is complex!"
... my code here...
然而,此循环从未进入(即 0.0100503358535014*I
未被归类为复杂)。
我应该怎样写一个 if 语句来检查结果是否以 xxxxxxx*I
的方式正确给出?
以下检查 sympy 对象 result
是否表示复数并将浮点值截断为 2
小数点。
import sympy as sp
result = 0.0100503358535014*sp.I
print(result.is_complex)
print(sp.N(result,2))
True 0.01*I
SymPy 支持 Python 的内置函数 complex()
:
>>> import sympy
>>> x = sympy.sqrt(-2)
>>> x
sqrt(2)*I
>>> complex(x)
1.4142135623730951j
http://docs.sympy.org/latest/modules/evalf.html
中有一些例子一个Python复数可以格式化为类似于浮点数:
>>> format(complex(x), 'e')
'0.000000e+00+1.414214e+00j'
>>> format(complex(x), 'f')
'0.000000+1.414214j'
>>> format(complex(x), 'g')
'0+1.41421j'
如果你想分别格式化实像部分,你可以自己做。
如果无法完成转换,将引发 TypeError:
>>> complex(sympy.Symbol('x'))
Traceback (most recent call last):
TypeError: can't convert expression to float
这里有一个替代方法,它顺便指出了如何检查复数的一个或两个部分是否可用。
>>> from sympy import *
>>> var('x')
x
>>> expr = (x+0.012345678*I)*(x-0.2346678934)*(x-(3-2.67893455*I))
>>> solve(expr)
[0.234667893400000, -0.012345678*I, 3.0 - 2.67893455*I]
>>> roots = solve(expr)
>>> for root in roots:
... r, i = root.as_real_imag()
... '%10.3f %10.3f i' % (r,i)
...
' 0.235 0.000 i'
' 0.000 -0.012 i'
' 3.000 -2.679 i'
您可以检查复杂部分的符号,以决定是否放置 plus 符号。我希望能够使用新奇的格式,但与Python TypeError: non-empty format string passed to object.__format__ 中提到的 Py3.4+ 自带的错误,我没有办法解决。