首页  >  文章  >  后端开发  >  如何将 2D Numpy 数组分割成更小的 2D 数组?

如何将 2D Numpy 数组分割成更小的 2D 数组?

Susan Sarandon
Susan Sarandon原创
2024-11-11 21:27:02659浏览

How to Slice a 2D Numpy Array into Smaller 2D Arrays?

使用 Numpy 将 2D 数组分割成更小的 2D 数组

Numpy 是一个用于在 Python 中操作多维数组的多功能库。它提供了多种数组操作方法,包括切片以提取特定部分。本文探讨了一种将 2D 数组切片为更小的 2D 数组的解决方案,模拟提供的示例:

[[1,2,3,4],   ->    [[1,2] [3,4]   
 [5,6,7,8]]          [5,6] [7,8]]

重塑和交换轴方法

建议的解决方案利用重塑和交换轴函数达到想要的切片效果。 reshape 函数修改数组的形状,而 swapaxes 函数交换指定的轴。在下面的Python代码中,blockshape函数封装了这种方法:

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))

说明:

  • h, w = arr.shape:存储维度输入数组 arr.
  • arr.reshape(h//nrows, nrows, -1, ncols):将数组重塑为 4 维数组。前两个维度确保它有 h/nrows 块,每个块包含 nrows 行。第三个维度用于保留列,第四个维度在每个块中有 ncols 列。
  • swapaxes(1,2):交换第二个和第三个维度,这可以有效地沿行排列块,并且columns.
  • reshape(-1, nrows, ncols):将数组重塑回所需的形状,由 h/nrows * w/ncols 2D 数组组成,每个数组都有 nrows 和 ncols。

用法示例

为了说明用法,请考虑示例数组 c:

np.random.seed(365)
c = np.arange(24).reshape((4, 6))

将 c 切成 2x3 块:

sliced = blockshaped(c, 2, 3)

sliced 将保存所需的 2D 块:

[[[ 0  1  2]
  [ 6  7  8]]

 [[ 3  4  5]
  [ 9 10 11]]

 [[12 13 14]
  [18 19 20]]

 [[15 16 17]
  [21 22 23]]]

结论

此解决方案演示了如何使用 reshape 和 swapaxes 函数将 2D numpy 数组切片为更小的 2D 数组。它提供了一种灵活高效的方法来处理和操作图像或其他矩阵。

以上是如何将 2D Numpy 数组分割成更小的 2D 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn