假设我有一个这样的NumPy数组:
[[100. 100. 100. 100. 100.]
[100. 0. 0. 0. 100.]
[100. 0. 0. 0. 100.]
[100. 0. 0. 0. 100.]
[100. 100. 100. 100. 100.]]
我想取中间值:
0. 0. 0.
0. 0. 0.
0. 0. 0.
并将它们设置为相应数字的上、左、右和下的数字之和。例如,第一个0.
将成为100. + 100. + 0. + 0. = 200.
。
我一般是矢量化的新手,所以我不确定如何进行只使用矢量化。有什么提示吗?
3条答案
按热度按时间mbzjlibv1#
你正在寻找的操作似乎是一个卷积操作。虽然numpy没有提供一个简单的2d卷积操作,但scipy提供了,你可以使用它:reference here
对于您的特定情况,您可能希望使用以下形式的卷积滤波器对2D数组进行卷积:
所以代码将是:
注意,还有其他位置参数决定在边缘处做什么。为此,请参考上面的链接。
mode="valid"
忽略未找到相应求和点的点,依此类推。5n0oy7gb2#
我看到这篇文章时,你刚刚发布,然后Numpy没有提到(修改是后来完成的),我制定了它,因此在pytorch中分享,但我相信这将比numpy更快
lnxxn5zx3#
一些切片: