首页 > 解决方案 > 使用 numpy 在二维数组中查找模式

问题描述

我有一个由 1 和零组成的数组,称为 a。例如:

a= 
[[0,0,1,1,1,0],
[0,0,0,0,0,0],
[1,0,0,0,0,1],
[0,0,0,0,1,0],
[0,0,0,1,0,0],
[0,0,1,0,0,1]]

和一个内核(k):

k =
[[0,0,1]
[0,1,0]
[1,0,0]]

我想在 a 中找到所有 k 的实例。我希望卷积的结果是:

conv(a,k) = 
    [[0,0,0,0,0,0],
    [0,0,0,0,0,0],
    [0,0,0,0,0,0],
    [0,0,0,0,1,0],
    [0,0,0,1,0,0],
    [0,0,0,0,0,0]]

有内置功能吗?

我知道它可以用 for 循环来完成,但这对于大型数组来说太慢了。谢谢

标签: numpymatrix

解决方案


可以使用 numpy.fft 应用卷积

代码来自:https ://laurentperrinet.github.io/sciblog/posts/2017-09-20-the-fastest-2d-convolution-in-the-world.html#using-directly-numpy

from numpy.fft  import fft2, ifft2
def np_fftconvolve(A, B):
    return np.real(ifft2(fft2(A)*fft2(B, s=A.shape)))

推荐阅读