首页 > 后端开发 > Python教程 > 如何使用 NumPy 将 2D 数组分割成更小的 2D 数组?

如何使用 NumPy 将 2D 数组分割成更小的 2D 数组?

DDD
发布: 2024-11-07 16:21:02
原创
672 人浏览过

How to Slice a 2D Array into Smaller 2D Arrays with NumPy?

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

通常,有必要将 2D 数组分割为更小的 2D 数组。例如,考虑将 2x4 数组划分为两个 2x2 数组的任务。

解决方案:

reshape 和 swapaxes 函数的组合在这种情况下被证明是有效的:

import numpy as np

def blockshaped(arr, nrows, ncols):
    """
    Converts a 2D array into a 3D array with smaller subblocks.
    """
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not divisible by {nrows}"
    assert w % ncols == 0, f"{w} columns is not divisible by {ncols}"

    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))
登录后复制

用法示例:

考虑以下数组:

c = np.arange(24).reshape((4, 6))
print(c)
登录后复制

输出:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
登录后复制

切片将数组分成更小的块:

print(blockshaped(c, 2, 3))
登录后复制

输出:

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

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

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

 [[15 16 17]
  [21 22 23]]]
登录后复制

附加说明:

  • unblockshape 函数可用于反转切片。
  • Superbatfish 的 blockwise_view 以其独特的格式提供了另一种选择。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板