2016-11-04 5 views

ответ

3

Python изначально поддерживает комплексные числа, но он использует инженерную условность J для мнимой единицы вместо математика я.

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] 
0

Вот вариация на тему 'заменить я с у' решения:

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 ])