如何将数组划分为段,然后使用python numpy执行段的子段?

时间:2019-04-08 06:31:38

标签: python arrays image numpy

我想将8 * 8数组划分为4个段(每个段为4 * 4数组),如下步骤2所示。然后再次将每个分段划分为其他小的4个子细分(每个子细分为2 * 2数组),然后找到每个子细分的平均值,然后使用其中的4个子细分的4个平均值找到每个细分的标准误差。这样最后我只有一个数组(2 * 2数组),即1个段的标准差为1。

import numpy as np
from skimage.util.shape import view_as_blocks

arr=np.array([[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8]])

img= view_as_blocks(arr, block_shape=(4,4))

到目前为止,我已经尝试过了,但是由于我是python和numpy的新手,所以我无法满足我的要求。请帮助我达到要求。

#step1-Array
array([[1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8]])

#step2-segments
array([[[[1, 2, 3, 4],
         [1, 2, 3, 4],
         [1, 2, 3, 4],
         [1, 2, 3, 4]],

        [[5, 6, 7, 8],
         [5, 6, 7, 8],
         [5, 6, 7, 8],
         [5, 6, 7, 8]]],


       [[[1, 2, 3, 4],
         [1, 2, 3, 4],
         [1, 2, 3, 4],
         [1, 2, 3, 4]],

        [[5, 6, 7, 8],
         [5, 6, 7, 8],
         [5, 6, 7, 8],
         [5, 6, 7, 8]]]])

**more steps to go to get final output**

预期产量

([[1.0, 1.0],
  [1.0, 1.0]])

1 个答案:

答案 0 :(得分:1)

可以使用view_as_blocks中的函数skimage.util.shape完成。

相关问题