2012-10-05 4 views
49

내가 할 노력하고 다음하지만 NumPy와 배열과 :이 결과 주어야한다파이썬의 numpy에서 "zip()"에 해당하는 것은 무엇입니까?

x = [(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)] 
normal_result = zip(*x) 

:

y = np.array(x) 
numpy_result = zip(*y) 
print type(numpy_result) 
:

normal_result = [(0.1, 0.1, 0.1, 0.1, 0.1), (1., 2., 3., 4., 5.)] 

을하지만, 입력 벡터는 NumPy와 배열 인 경우

(예상) 다음을 반환합니다.

<type 'list'> 

문제는 이후 결과를 다시 numpy 배열로 변환해야한다는 것입니다.

이러한 앞뒤 변환을 피할 효율적인 numpy 함수가 있다면 무엇을 알고 싶습니다.

답변

72

당신은 그냥 트랜스 수 있습니다 ...

>>> a = np.array([(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)]) 
>>> a 
array([[ 0.1, 1. ], 
     [ 0.1, 2. ], 
     [ 0.1, 3. ], 
     [ 0.1, 4. ], 
     [ 0.1, 5. ]]) 
>>> a.T 
array([[ 0.1, 0.1, 0.1, 0.1, 0.1], 
     [ 1. , 2. , 3. , 4. , 5. ]]) 
31

dstack를 사용해보십시오 :

>>> from numpy import * 
>>> a = array([[1,2],[3,4]]) # shapes of a and b can only differ in the 3rd dimension (if present) 
>>> b = array([[5,6],[7,8]]) 
>>> dstack((a,b)) # stack arrays along a third axis (depth wise) 
array([[[1, 5], 
     [2, 6]], 
     [[3, 7], 
     [4, 8]]]) 

그래서 귀하의 경우는 다음과 같습니다

x = [(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)] 
y = np.array(x) 
np.dstack(y) 

>>> array([[[ 0.1, 0.1, 0.1, 0.1, 0.1], 
    [ 1. , 2. , 3. , 4. , 5. ]]]) 
+2

가 여분의 차원을 추가합니다 2 차원 배열 OP가 원했던 것과 비슷한 것을 원하면 dstacked 배열의 첫 번째 요소를 취해야합니다. – benjwadams

+0

Numpy np.stack은 zip에 가장 근접한 행렬입니다. 'arrays = (x, y); np.stack (배열, 축 = len (배열))'. – CMCDragonkai

+2

OP에 필요한 np.column_stack도 있습니다. – RecencyEffect

관련 문제