python numpy将字符串转换为复数

时间:2016-11-04 11:38:47

标签: python numpy complex-numbers

我有一个字符串列表,每个字符串都是一个复数。格式如下:

lr=['3.123+2.43i','0.23454-1.2134i','0.6543+0.76543i','1.12324+0.6543i']

我想要的是每个复数的模数列表。

2 个答案:

答案 0 :(得分:3)

Python原生支持复数,但它使用 j 的工程约定代替数学家的 i

lr = ['3+4i', '3.123+2.43i', '0.23454-1.2134i', '0.6543+0.76543i', '1.12324+0.6543i']
for s in lr:
    s = s.replace('i', 'j')
    v = complex(s)
    print(v, abs(v))

<强>输出

(3+4j) 5.0
(3.123+2.43j) 3.9570227444380457
(0.23454-1.2134j) 1.2358594465391282
(0.6543+0.76543j) 1.006971486637035
(1.12324+0.6543j) 1.2999140693138143

我们可以使用列表推导创建模型列表:

moduli = [abs(complex(s.replace('i', 'j'))) for s in lr]
print(moduli)

<强>输出

[5.0, 3.9570227444380457, 1.2358594465391282, 1.006971486637035, 1.2999140693138143]

答案 1 :(得分:1)

以下是'替换i与j'解决方案的变体:

In [182]: lr=['3.123+2.43i','0.23454-1.2134i','0.6543+0.76543i','1.12324+0.6543i']

可以创建一个字符串数组:

In [183]: np.array(lr)
Out[183]: 
array(['3.123+2.43i', '0.23454-1.2134i', '0.6543+0.76543i',
       '1.12324+0.6543i'], 
      dtype='<U15')

但并不复杂 - 至少不是直接

In [184]: np.array(lr,np.complex)
...
TypeError: a float is required

但是有一个函数在数组元素上执行字符串替换:

In [185]: a=np.array(lr)
In [186]: np.char.replace(a,'i','j')
Out[186]: 
array(['3.123+2.43j', '0.23454-1.2134j', '0.6543+0.76543j',
       '1.12324+0.6543j'], 
      dtype='<U15')

现在可以将字符串数组转换为复杂的

In [187]: np.char.replace(a,'i','j').astype(np.complex)
Out[187]: 
array([ 3.12300+2.43j   ,  0.23454-1.2134j ,  0.65430+0.76543j,
        1.12324+0.6543j ])