gpt4 book ai didi

python - numpy滑动二维窗口计算

转载 作者:太空狗 更新时间:2023-10-30 02:43:36 24 4
gpt4 key购买 nike

我正在尝试学习一种使用 numpy 来有效解决各种情况下涉及滑动窗口的问题的方法。这是一个说明我感兴趣的问题类型的示例:

我有一个大型二维矩阵,我想对矩阵中每个元素的相邻元素执行计算。例如,我可能想找到最大值,排除每个索引处 (x-1,y)(x+1,y+1) 处索引处的一些特殊值,并将结果放入另一个不同的 2d"解”矩阵。

请注意,convolution2d 虽然有用,但在这种情况下对我不起作用,因为我对每个像素都有特定的操作,并且只想对(每个像素的)特定邻居进行操作。

还有一个好处是确保我不会越界。

最后,是否也可以使用任何状态?在所有邻居都为 0 的情况下,我希望分配一个新的整数 ID,每次发生这种情况时我都会递增。

这是一个例子:

Window:

0 0 1
1 0 0
0 0 0


Input:

0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 9 9 0 0 9 0 0
0 0 0 0 0 0 0 0 0

Output:

0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 2 0 0
0 0 0 0 0 0 0 0 0

最佳答案

使用 np.roll() 创建二级矩阵。然后在初始矩阵和次级矩阵之间执行您需要的任何操作。例如,取中央单元格和两个相邻单元格的平均值:

sec_a = np.roll(mtrx, -1, axis=0)
sec_b = np.roll(mtrx, -1, axis=1)

result = (mtrx + sec_a + sec_b) / 3

此外,roll() 会围绕边缘滚动,因此无需担心边界。

关于python - numpy滑动二维窗口计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32660953/

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