2012-01-29 15 views
17

मेरे पास है:पायथन में numpy में सरणी flatten करने के लिए सही और कुशल तरीका?

a = array([[1,2,3],[4,5,6]]) 

और मैं इसे समतल, एक फ्लैट सरणी प्रविष्टि में दो भीतरी सूचियों में शामिल होने के लिए करना चाहते हैं। मैं कर सकते हैं:

array(list(flatten(a))) 

लेकिन उस सूची डाली (मैं एक सरणी और नहीं एक जनरेटर के साथ खत्म करना चाहते हैं।)

इसके अलावा, कैसे इस तरह एक सरणी के लिए सामान्यीकृत किया जा सकता के कारण अक्षम लगता है इस:

b = array([[[1,2,3],[4,5,6]], [[10,11,12],[13,14,15]]]) 

जहां परिणाम होना चाहिए:

b = array([[1,2,3,4,5,6], 
      [10,11,12,13,14,15]]) 

वहाँ/कुशल numpy/अनुसूचित जाति builtin हैं इसके लिए आईपी ऑपरेटरों? धन्यवाद।

उत्तर

11

आप reshape method का उपयोग कर सकते हैं।

>>> import numpy 
>>> b = numpy.array([[[1,2,3],[4,5,6]], [[10,11,12],[13,14,15]]]) 
>>> b.reshape([2, 6]) 
array([[ 1, 2, 3, 4, 5, 6], 
     [10, 11, 12, 13, 14, 15]]) 
+0

मुझे लगता है कि यह होना चाहिए 'a.reshape लेना चाहिए ([2,6])', धन्यवाद! – user248237dfsf

+0

@ user248237: ओह, क्षमा करें, मैंने आपके प्रश्न को गलत तरीके से पढ़ा है, फिर भी यह वह तरीका है जिसका उपयोग आप करना चाहते हैं। अब तय :) –

+4

reshape() एक अच्छी विधि है। –

8

कैसे के बारे में:

>>> import numpy as np 
>>> a=np.arange(1,7).reshape((2,3)) 
>>> a 
array([[1, 2, 3], 
     [4, 5, 6]]) 
>>> a.flatten() 
array([1, 2, 3, 4, 5, 6]) 

और

>>> import numpy as np 
>>> b=np.arange(1,13).reshape((2,2,3)) 
>>> b 
array([[[ 1, 2, 3], 
     [ 4, 5, 6]], 

     [[ 7, 8, 9], 
     [10, 11, 12]]]) 
>>> b.reshape((2,6)) 
array([[ 1, 2, 3, 4, 5, 6], 
     [ 7, 8, 9, 10, 11, 12]]) 
+0

+1 flatten() के लिए कर सकते हैं - यह फोरट्रान/कॉलम-प्रमुख फ़्लैटिंग भी कर सकता है। reshape (-1) भी flatten होगा। –

15

आप numpy.flatten और numpy.ravel की जाँच करने के लिए आवश्यकता हो सकती है, दोनों एक 1-डी सरणी एक n घ सरणी से लौट आते हैं।

इसके अलावा, यदि आप लौटाए गए 1-डी सरणी को संशोधित नहीं करने जा रहे हैं, तो मेरा सुझाव है कि आप numpy.ravel का उपयोग करें, क्योंकि यह सरणी की एक प्रति नहीं बनाता है, लेकिन केवल सरणी का दृश्य लौटाता है, जो कि है numpy.flatten से बहुत तेज़।

>>>a = np.arange(10000).reshape((100,100)) 

>>>%timeit a.flatten() 
100000 loops, best of 3: 4.02 µs per loop 

>>>%timeit a.ravel() 
1000000 loops, best of 3: 412 ns per loop 

यह भी देखें post

-1
a = np.arange(10000) 

%timeit a.reshape(100,100) 
1000000 loops, best of 3: 517 ns per loop 

%timeit a.resize(100,100) 
1000000 loops, best of 3: 428 ns per loop 

मुझे आश्चर्य है कि आकृति बदलें दूर कम समय है, लेकिन इसके लगभग समान

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