如何在numpy中进行卷积矩阵运算?

2024-03-29 11:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法用numpy进行convolution matrix操作?

^{}只在1D数组上操作,因此这不是解决方案。

我宁愿避免使用scipy,因为在Windows上安装它似乎更困难。


Tags: numpywindowsscipy数组解决方案matrix办法convolution
2条回答

我强烈建议为此使用openCV。但是原则上,您几乎可以直接使用wiki-article on kernel convolution上的“伪代码”来创建自己的函数。。。

ks = (kl-1)/2 ## kernels usually square with odd number of rows/columns
kl = len(kernel)
imx = len(matrix)
imy = len(matrix[0])
for i in range(imx):
  for j in range(imy):
    acc = 0
    for ki in range(kl): ##kernel is the matrix to be used
      for kj in range(kl):
        if 0 <= i-ks <= kl: ## make sure you don't get out of bound error
          acc = acc + (matrix[i-ks+ki][j-ks+kj] * kernel[ki][kj]) 
  matrix[i][j] = acc

原则上,这应该能做到(但我还没有测试过…)

我希望这对你有帮助。

你有scipy的ndimage,它允许你用convolve进行N维卷积:

from scipy.ndimage import convolve
convolve(data, kernel)

我知道你说过你想避免神经病。。。但我建议你不要这样做。Scipy在很多方面都很棒。如果要在windows上安装,请尝试Anaconda Distribution,它已经安装了scipy。

Anaconda是一个多平台的python发行版,它预装了所有必要的库(包括许多科学计算库),以及安装新库的工具,如pipconda。不,他们不会付钱给我做广告,但会让你的多平台生活更轻松。

相关问题 更多 >