2012-12-21 16 views
22

मैं इस3 डी Numpy सरणी 2D पर

arange(16).reshape((4,2,2)) 
array([[[ 0, 1], 
     [ 2, 3]], 

     [[ 4, 5], 
     [ 6, 7]], 

     [[ 8, 9], 
     [10, 11]], 

     [[12, 13], 
     [14, 15]]]) 

की तरह एक 3 डी मैट्रिक्स है और उन्हें ग्रिड प्रारूप में ढेर,

array([[ 0, 1, 4, 5], 
     [ 2, 3, 6, 7], 
     [ 8, 9, 12, 13], 
     [10, 11, 14, 15]]) 

साथ समाप्त करना चाहते हैं वहाँ स्पष्ट रूप से बिना करने का एक तरीका है hstacking (और/या vstacking) उन्हें या एक अतिरिक्त आयाम जोड़ने और reshaping (सुनिश्चित नहीं है कि यह काम करेगा)?

धन्यवाद,

+0

हमें अपना कोड दिखाएं। – tostao

उत्तर

35
In [27]: x = np.arange(16).reshape((4,2,2)) 

In [28]: x.reshape(2,2,2,2).swapaxes(1,2).reshape(4,-1) 
Out[28]: 
array([[ 0, 1, 4, 5], 
     [ 2, 3, 6, 7], 
     [ 8, 9, 12, 13], 
     [10, 11, 14, 15]]) 

मैं reshaping/unshaping arrays into blocks, here के लिए अधिक सामान्य कार्यों पोस्ट किया है।

+15

NumPy की इस निपुणता से अजीब। :) – EOL

+0

ठीक है, तो मैं विचार प्रदान की 'एन = mxn'' बी.एम. एक्स bn' आयाम के साथ एन ब्लॉक मैट्रिक्स है और उन्हें एक 'mxn' मैट्रिक्स में ढेर करना चाहते हैं,, मैं तो ' x.reshape (एम, के लिए होता है एन, बी.एम., बिलियन) .swapaxes (1,2) .reshape (BM * मी, -1) ' बस अगर कोई इस उद्देश्य के लिए किसी भी numpy समारोह था जानना चाहता था। एक बार फिर @unutbu धन्यवाद। – poeticcapybara

+1

@EOL: धन्यवाद, EOL, हालांकि अगर आप देखा (http://www.youtube.com/watch?v=sY_Yf4zz-yo) [पर्दे के पीछे क्या पर चला गया], यह नहीं था, इसलिए बहुत :) – unutbu

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