2016-12-02 1 views
0

목록에서 반복자를 사용하여 튜플에가는 중에 this question이 발견되었지만 큰 데이터 세트를 다루고 있습니다.효율적으로 두 번째 numpy 배열을 튜플의 1d numpy 배열로 변환 하시겠습니까?

나는 ... 거기에 실제로 배열에 튜플의 목록에서가는 질문의 무리입니다,하지만 난 다른 방향으로 이동하는 방법을 발견하지 않았습니다, 목록에 튜플에서 진행을 위해

I를 this question 발견 이 :

np.arrray([( 0 1) 
      ( 1 1) 
      ( 2 1) 
      ..., 
      (1004 3) 
      (1005 1) 
      (1006 1)]) 

내가 반드시 튜플의 NumPy와 배열을 필요로하지 않습니다,하지만 난 effciently을 수행 할 :

np.arrray([[ 0 1] 
      [ 1 1] 
      [ 2 1] 
      ..., 
      [1004 3] 
      [1005 1] 
      [1006 1]]) 

내가 원하는.

+0

을,하지만 난 effciently을 수행 할 * - 당신이 시도해야 정규리스트 이해력? – RomanPerekhrest

+0

@RomanPerekhrest는 빠른 답장을 보내 주셔서 감사합니다. 목록 이해가 [이 질문] (http://stackoverflow.com/a/23286299/2876684)의 답변과 동일하지 않습니까? – mattyd2

+1

2-d numpy 배열로 직접 할 수없는 튜플의 1-d numpy 배열 (또는 다른 시퀀스)로 무엇을 할 수 있습니까? – jez

답변

4

효율적이 속도가 매우 빠르고 지능형리스트

보다 것이다 튜플

zip(at[0],at[1]) 

의 목록에 두 개의 1D 목록을 변환 한 후 zip를 전치

a = np.array([[ 0 , 1], 
       [ 1 , 1], 
       [ 2 , 1], 
       [ 0 , 1], 
       [ 1 , 1], 
       [ 2 , 1] ]) 

at = a.T 

at= array([[0, 1, 2, 0, 1, 2], 
      [1, 1, 1, 1, 1, 1]]) 

을,이 변환을 벡터화하려면

하지만 파이썬 3.4

list(zip(at[0],at[1]) 

Out []: 
[(0, 1), (1, 1), (2, 1), (0, 1), (1, 1), (2, 1)] 

편집 : 덕분에 직접 슬라이스로 약간 빠른 아마도

을 @Divakar하기 : 나는 반드시 튜플의 NumPy와 배열을 필요가 없습니다 * zip(a[:,0], a[:,1])

+1

내 시스템에서 3 배 더 빨라졌습니다. 매우 멋진 외부 솔루션! – jez

+0

'zip (a [:, 0], a [:, 1])'을 직접 슬라이싱하면 다소 빨라질 수 있습니다. – Divakar

+0

@SerialDev 매력처럼 작동합니다! 고맙습니다! – mattyd2

관련 문제