gpt4 book ai didi

python - 使用 numpy 将 M*N 矩阵的每个 3x3 窗口求和为 M/3*N/3 矩阵

转载 作者:太空狗 更新时间:2023-10-30 00:40:56 28 4
gpt4 key购买 nike

我正在尝试实现一个求和(或最终取平均值)的函数给定矩阵的每个 3x3 窗口,并使用每个窗口的结果创建一个小 9 倍的矩阵。

我想不出一种高效简洁的方法来使用 numpy 执行此操作。

有什么想法吗?

谢谢!

最佳答案

最简单的 numpy only 方法比卷积做的工作少得多,因此可能比基于过滤器的方法更快,它是将原始数组的大小调整为具有额外维度的数组,然后通过对新数组求和将其恢复正常尺寸:

>>> arr = np.arange(108).reshape(9, 12)
>>> rows, cols = arr.shape
>>> arr.reshape(rows//3, 3, cols//3, 3).sum(axis=(1, 3))
array([[117, 144, 171, 198],
[441, 468, 495, 522],
[765, 792, 819, 846]])

如果您想要均值,只需将结果数组除以元素数即可:

>>> arr.reshape(rows//3, 3, cols//3, 3).sum(axis=(1, 3)) / 9
array([[ 13., 16., 19., 22.],
[ 49., 52., 55., 58.],
[ 85., 88., 91., 94.]])

此方法仅在您的数组的形状本身是 3 的倍数时才有效。

关于python - 使用 numpy 将 M*N 矩阵的每个 3x3 窗口求和为 M/3*N/3 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com