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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将数组划分为段,然后使用python 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]])
答案

可以使用view_as_blocks的功能skimage.util.shape来完成。

以上是关于如何将数组划分为段,然后使用python numpy执行段的子段?的主要内容,如果未能解决你的问题,请参考以下文章

在swift 3中将数组转换为段标题

利用Python的pip命令安装nump

nump库的简单函数介绍

Nump库的基本使用

我如何将整数数组划分为N个分区?

python中去除数组中inf