python - NumPy 。如何将二维数组按网格分割为多个数组?

标签 python arrays numpy split slice

我有一个 numpy 二维数组:

c = np.arange(36).reshape(6, 6)

[[ 0,  1,  2,  3,  4,  5],
 [ 6,  7,  8,  9, 10, 11],
 [12, 13, 14, 15, 16, 17],
 [18, 19, 20, 21, 22, 23],
 [24, 25, 26, 27, 28, 29],
 [30, 31, 32, 33, 34, 35]]

我想按 3x3 网格将其拆分为多个 2D 数组。 (这就像将大图像按 3x3 网格分割为 9 个小图像):

[[ 0,  1,|  2,  3,|  4,  5],
 [ 6,  7,|  8,  9,| 10, 11],
---------+--------+---------
 [12, 13,| 14, 15,| 16, 17],
 [18, 19,| 20, 21,| 22, 23],
---------+--------+---------
 [24, 25,| 26, 27,| 28, 29],
 [30, 31,| 32, 33,| 34, 35]]

最后我需要包含 9 个 2D 数组的数组。像这样:

[[[0, 1], [6, 7]], 
 [[2, 3], [8, 9]],
 [[4, 5], [10, 11]],
 [[12, 13], [18, 19]],
 [[14, 15], [20, 21]],
 [[16, 17], [22, 23]],
 [[24, 25], [30, 31]],
 [[26, 27], [32, 33]],
 [[28, 29], [34, 35]]]

这只是我需要的一个示例。我想知道如何通过网格(N,M)从大二维数组制作小二维数组

最佳答案

你可以使用类似的东西:

from numpy.lib.stride_tricks import sliding_window_view

out = np.vstack(sliding_window_view(c, (2, 2))[::2, ::2])

输出:

>>> out.tolist()
[[[0, 1], [6, 7]],
 [[2, 3], [8, 9]],
 [[4, 5], [10, 11]],
 [[12, 13], [18, 19]],
 [[14, 15], [20, 21]],
 [[16, 17], [22, 23]],
 [[24, 25], [30, 31]],
 [[26, 27], [32, 33]],
 [[28, 29], [34, 35]]]

关于python - NumPy 。如何将二维数组按网格分割为多个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75056147/

相关文章:

python - 将每周时间序列转换为每日(使用比例标准)

python - 值错误: array must not contain infs or NaNs during Biclustering

python - numpy.recfromcsv 没有释放 GIL

python - 选择二维 NumPy 数组中每列特定范围内的元素

python - matplotlib 中的曲面图

python - 使用 SQLAlchemy ORM 基于多对一关系中的一个对象过滤查询

python - 如果来自不同类的对象相互交互可以吗?

javascript - 如何在 JavaScript 中创建具有不同变量的可重用函数

python - 将一个 numpy 数组中的值填充到另一个数组中

java - 如何在 Jython 中使用 ExpectJ?