1

我有以下数组

>>> a
array([0, 8, 0, 8, 0, 8])
>>> b
array([0, 6, 0, 6, 0, 6])

这些代表一组复数的实部和虚部。

我可以numpy.complex使用以下方法将它们重新格式化为数据类型

>>> [x for x in itertools.imap(complex,a,b)]
[0j, (8+6j), 0j, (8+6j), 0j, (8+6j)]

但是我真正想要得到的只是具有奇数索引的元素:

[(8+6j),(8+6j),(8+6j)]

有没有简单的方法来实现这一目标?

4

2 回答 2

2
>>> import numpy as np
>>> a = np.array([0, 8, 0, 8, 0, 8])
>>> b = np.array([0, 6, 0, 6, 0, 6])
>>> np.vectorize(complex)(a, b)[1::2]
array([ 8.+6.j,  8.+6.j,  8.+6.j])

那将是最好的方法,但为了完整性,itertools解决方案是:

>>> from itertools import imap, islice
>>> list(islice(imap(complex,a,b), 1, None, 2))
[(8+6j), (8+6j), (8+6j)]
于 2013-05-08T11:53:27.990 回答
1

[1::2]从索引 1(第二个)开始,将所有其他项目带到列表的末尾。那是:

>>> [x for x in itertools.imap(complex,a,b)][1::2]

[(8+6j), (8+6j), (8+6j)]
于 2013-05-08T11:59:02.683 回答