2017-01-06 9 views
6

मैंने इस फ़ंक्शन का उपयोग करके एक (512x512) 2-आयामी सरणी को 2x2 ब्लॉक में विभाजित किया।गैर-ओवरलैपिंग सरणी ब्लॉक विलय

skimage.util.view_as_blocks (arr_in, block_shape) 
array([[ 0, 1, 2, 3], 
    [ 4, 5, 6, 7], 
    [ 8, 9, 10, 11], 
    [12, 13, 14, 15]]) 
    >>> B = view_as_blocks(A, block_shape=(2, 2)) 
    >>> B[0, 0] 
    array([[0, 1], 
      [4, 5]]) 
    >>> B[0, 1] 
    array([[2, 3], 
      [6, 7]]) 

अब मैं हेरफेर के बाद उनके मूल स्थानों के लिए एक ही ब्लॉक लगाने की जरूरत है, लेकिन मैं उस के लिए skimage में किसी भी समारोह नहीं देख सकता था।

गैर-ओवरलैपिंग सरणी को पहले विलय करने का सबसे अच्छा तरीका क्या है?

धन्यवाद!

उत्तर

5

उपयोग पक्षांतरित/swapaxes दूसरे और तीसरे कुल्हाड़ियों स्वैप और उसके बाद पिछले दो कुल्हाड़ियों के लिए नयी आकृति प्रदान करने विलय कर दिया -

B.transpose(0,2,1,3).reshape(-1,B.shape[1]*B.shape[3]) 
B.swapaxes(1,2).reshape(-1,B.shape[1]*B.shape[3]) 

नमूना रन -

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

In [42]: B = view_as_blocks(A, block_shape=(2, 2)) 

In [43]: B 
Out[43]: 
array([[[[ 0, 1], 
     [ 4, 5]], 

     [[ 2, 3], 
     [ 6, 7]]], 


     [[[ 8, 9], 
     [12, 13]], 

     [[10, 11], 
     [14, 15]]]]) 

In [44]: B.transpose(0,2,1,3).reshape(-1,B.shape[1]*B.shape[3]) 
Out[44]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]]) 
+0

भी मदद अपने पहले उत्तर के लिए धन्यवाद काम किया 'बी ट्रांसफर (0,2,1,3) .reshape (512,512) '। एक सवाल है, इस भाग का क्या अर्थ है '(-1, बीशिप [1] * बीशिप [3]) '? – enterbutton

+0

@enterbutton मूल रूप से इसका मतलब है कि नए आकार में 'बीशिप [1] * बीशिप [3] 'कॉल की संख्या होगी और पंक्तियों की संख्या को पुनर्विक्रय फ़ंक्शन द्वारा निर्णय लिया जाएगा जिसमें तत्वों की कुल संख्या को विभाजित किया जा सके उस '-1' द्वारा बताए गए कॉल की संख्या। आम आदमी शब्दों में, मैं कंप्यूटर को गणना करने की अनुमति दे रहा हूं। उस '-1' के साथ मेरे लिए पंक्तियों का। ज्यादातर मामलों में, यह कॉम्पैक्ट कोड बनाने के लिए था। उम्मीद है कि समझ में आता है! – Divakar

+0

मदद और स्पष्टीकरण @ डिवाकर – enterbutton

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