如何在Python中格式化复数

时间:2017-03-14 16:08:08

标签: python sympy complex-numbers

在我的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正确的方式给出?

3 个答案:

答案 0 :(得分:4)

SymPy支持Python的内置函数navigator.mediaDevices .getUserMedia({ audio: true, video: true }) .then(function (stream) { console.log('got stream with id ' + stream.id) stream.getTracks().forEach(function (track) { track.stop() }) // WebCam will not be busy anymore }) .catch(function (reason) { console.error('capture failed ' + reason) })

complex()

http://docs.sympy.org/latest/modules/evalf.html

中有一些例子

Python复数的格式可以类似于float:

>>> import sympy
>>> x = sympy.sqrt(-2)
>>> x
sqrt(2)*I
>>> complex(x)
1.4142135623730951j

如果你想分别对真实和成像部分进行格式化,你可以自己动手。

如果无法完成,转换会引发TypeError:

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

答案 1 :(得分:1)

这是一个替代方案,它偶然指示如何检查复数的一个或两个部分是否可用。

>>> 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 +对我没有任何补救措施。

答案 2 :(得分:0)

以下检查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