2017-01-09 37 views
2

我從Sympy求解器解決方案的這個名單:轉換爲numpy的複數

In [49]: sol 
Out[49]: 
[-1.20258344291917 - 0.e-23*I, 
-0.835217129314554 + 0.e-23*I, 
0.497800572233726 - 0.e-21*I] 

In [50]: type(sol) 
Out[50]: list 

In [51]: type(sol[0]) 
Out[51]: sympy.core.add.Add 

我怎麼能這個列表轉換爲numpy的對象與在正常複數值細胞?

回答

5

您可以在每個元素上調用內置函數complex,然後將結果傳遞給np.array()

例如,

In [22]: z 
Out[22]: [1 + 3.5*I, 2 + 3*I, 4 - 5*I] 

In [23]: type(z) 
Out[23]: list 

In [24]: [type(item) for item in z] 
Out[24]: [sympy.core.add.Add, sympy.core.add.Add, sympy.core.add.Add] 

使用列表理解和內置函數complex創建蟒複雜值的列表:

In [25]: [complex(item) for item in z] 
Out[25]: [(1+3.5j), (2+3j), (4-5j)] 

使用相同的表達作爲參數numpy.array創建一個複雜的numpy陣列:

In [26]: import numpy as np 

In [27]: np.array([complex(item) for item in z]) 
Out[27]: array([ 1.+3.5j, 2.+3.j , 4.-5.j ]) 

或者,您可以使用numpy.fromiter

In [29]: np.fromiter(z, dtype=complex) 
Out[29]: array([ 1.+3.5j, 2.+3.j , 4.-5.j ])