Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中格式化复数_Python_Sympy_Complex Numbers - Fatal编程技术网

如何在Python中格式化复数

如何在Python中格式化复数,python,sympy,complex-numbers,Python,Sympy,Complex Numbers,在我的Python脚本中 result=sp.solve(eqn) 我以类似于的格式获得以下输出 result=0.010050335355014*I 我想这意味着解决方案是一个复数。因此,在这种情况下,也可以将其视为result=0.01j 我想在代码中添加格式,将result=0.010050335355014*I更改为更像result=0.01j。但是,当我试图使用isinstance检查结果是否复杂时,我发现了一些问题 if isinstance(result, complex):

在我的Python脚本中

result=sp.solve(eqn)

我以类似于的格式获得以下输出

result=0.010050335355014*I

我想这意味着解决方案是一个复数。因此,在这种情况下,也可以将其视为
result=0.01j

我想在代码中添加格式,将
result=0.010050335355014*I
更改为更像
result=0.01j
。但是,当我试图使用
isinstance
检查
结果是否复杂时,我发现了一些问题

if isinstance(result, complex):
        print "Result is complex!"
        ... my code here...
但是,从未进入该循环(即
0.010050335355014*i
在这里不被归类为复杂循环)


我应该用什么方法编写if语句来检查结果是否以
xxxxxxx*I
的方式正确给出?

以下检查symy对象
result
是否表示复数,并将浮点值截断为
2
小数点

import sympy as sp

result = 0.0100503358535014*sp.I
print(result.is_complex)
print(sp.N(result,2))

Symphy支持Python的内置函数
complex()

这里有一些例子

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'
如果要分别格式化real和imag部件,可以自己进行

如果转换无法完成,则会引发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'

您可以检查复杂零件的符号,以决定是否在中添加加号。我本希望能够使用新的格式,但却遇到了中提到的Py3.4+附带的错误,对此我没有任何补救办法。

这里的
I
是什么?一些特殊常数?如果你没有使用复杂的
I
,你在使用什么?我也认为
I
是一个实际的符号(它可能是一个symphy库),而不是一个复数的表示。什么是
type(result)
?@Denziloe
type(result)=
如果是instance(result,symphy.core.mul.mul):
我已经尝试过这种方法,但是如果我使用像
if(result.is_complex)
这样的if语句,那么
type(result)=
type(result)=
这两种方法都会返回true,这不是我想要的。只有当结果的末尾有一个
*I
部分时,我如何才能得到一个特定的if语句?对于一大类symphy表达式,包括符号表达式,甚至是实数,is_complex将返回True
x.is_complex
只需检查
x
是否为复数。
>>> 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'