2012-10-05 8 views
49

मुझे क्या करना कोशिश कर रहा हूँ निम्नलिखित लेकिन NumPy सरणी के साथ:पायथन के नुकीले में "ज़िप()" के बराबर क्या है?

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 सरणी में बदलने की आवश्यकता होगी।

मैं क्या जानना चाहता हूं कि क्या एक कुशल संख्यात्मक कार्य है जो इन पिछड़े और आगे के परिवर्तनों से बच जाएगा?

उत्तर

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 डी सरणी। यदि आप ओपी के समान कुछ चाहते हैं, तो आपको dstacked सरणी का पहला तत्व लेना होगा। – benjwadams

+0

Numpy np.stack matrices के लिए ज़िप के सबसे नज़दीकी है। 'सरणी = (एक्स, वाई); np.stack (सरणी, अक्ष = लेन (सरणी)) '। – CMCDragonkai

+2

np.column_stack भी है, जो ओपी की आवश्यकता हो सकती है। – RecencyEffect

संबंधित मुद्दे