2013-05-08 1 views
1

나는 다음과 같은 배열이python itertools.imap (func, p, q)은 인덱스에 대한 조건부 테스트 (예 : 홀수 인덱스 만있는 요소를 얻는 등) 할 수 있습니까?

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

이 복잡한 숫자의 집합의 실수 부와 허수 부분을 나타내고있다. 달성하기 위해

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

있나요 쉬운 방법 :

나는 그러나 내가 정말 싶어하는 홀수 인덱스 요소 만입니다

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

다음을 사용하여 numpy.complex 데이터 형식으로 그들을 포맷 할 수 있습니다 이?

답변

1

[1::2]이의 말에, 인덱스 1 (두 번째)에서 시작, 다른 모든 항목을합니다 그 목록. 즉 :

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

[(8+6j), (8+6j), (8+6j)] 
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)]