2017-01-06 5 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

Спасибо за помощь вашего первого ответа также работал «B.transpose (0,2,1,3) .resape (512 512)». Возникает вопрос, что означает эта часть '(-1, B.shape [1] * B.shape [3])'? – enterbutton

+0

@enterbutton В основном это означает, что новая форма имела бы 'B.shape [1] * B.shape [3]' количество cols и количество строк определялось функцией reshape путем деления общего количества элементов на количество cols, обозначенное символом '-1'. В условиях неспециалиста я позволяю компьютеру вычислить нет. строк для меня с этим '-1'. В большинстве случаев это означало выпуск компактных кодов. Надеюсь, это имеет смысл! – Divakar

+0

Еще раз спасибо за помощь и объяснение @Divakar – enterbutton

 Смежные вопросы

  • Нет связанных вопросов^_^