python - 通过平均多个单元格来简化矩阵

标签 python arrays list numpy matrix

我有一个大的 2D numpy 矩阵需要变小(例如:从 100x100 转换为 10x10)。

我的目标基本上是:将 nxn 矩阵分解成更小的 mxm 矩阵,对这些 mxm 切片中的单元格进行平均,然后构造一个这些 mxm 切片中的新(较小)矩阵。

我正在考虑使用类似 matrix[a::b, c::d] 的方法来提取较小的矩阵,然后对这些值进行平均,但这似乎过于复杂。有没有更好的方法来实现这一点?

最佳答案

你可以用 view_as_blocks 把你的数组分成 block 函数(在 scikit-image 中)。

对于 2D 数组,这将返回一个 4D 数组,其中 block 按行排序:

>>> import skimage.util as ski
>>> import numpy as np
>>> a = np.arange(16).reshape(4,4) # 4x4 array
>>> ski.view_as_blocks(a, (2,2))
array([[[[ 0,  1],
         [ 4,  5]],

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


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

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

沿最后两个轴取平均值返回一个二维数组,其中每个 block 均值为:

>>> ski.view_as_blocks(a, (2,2)).mean(axis=(2,3))
array([[  2.5,   4.5],
       [ 10.5,  12.5]])

注意:view_as_blocks 通过修改步幅返回数组的 View (它也适用于二维以上的数组)。它纯粹是在 NumPy 中使用 as_strided 实现的,因此如果您无法访问 scikit-image 库,您可以 copy the code from here .

关于python - 通过平均多个单元格来简化矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29435842/

相关文章:

html - 如何在 CSS 中排列列表元素符号?

ios - 我怎样才能看到 UIImageView 中的图像?

python - 如何在 Django 样式模板中收集子评论?

python - 从列表列表中统一抽取5个元素

Python - 在标记和边框之间的图例左侧添加空格

php - 在 Twig 模板中设置多维数组中单个对象的值

c++ - 在 C++ 中将对象添加到对象数组

Java排序循环不工作

python - 试图理解 scipy 和 numpy 插值

python - 如何使用不同列中的值和文本注释分组条