有沒有辦法使用numpy做convolution matrix操作?如何在numpy中進行卷積矩陣運算?
numpy.convolve
只適用於1D陣列,所以這不是解決方案。
我寧願避免使用scipy,因爲在Windows上安裝它似乎更困難。
有沒有辦法使用numpy做convolution matrix操作?如何在numpy中進行卷積矩陣運算?
numpy.convolve
只適用於1D陣列,所以這不是解決方案。
我寧願避免使用scipy,因爲在Windows上安裝它似乎更困難。
爲了這個目的,我強烈推薦使用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的......但我會建議反對。 Scipy在很多方面都很棒。如果你想在Windows上安裝它,請嘗試Anaconda Distribution,它已安裝scipy。
Anaconda是一個多平臺的python發行版,其中包含預裝的所有基本庫(包括大量科學計算庫)以及諸如pip
或conda
之類的工具來安裝新的庫。不,他們不付錢給我做廣告:/但讓你的多平臺生活更容易。
感謝您的建議,但SciPy方法不太可行,因爲我開發的是被其他人使用,所以我更喜歡簡單的方法來安裝任何先決條件,'pip install [package]'是一個衆所周知的方法,需要人們使用是合理的,但安裝Anaconda Distribution之類的東西是另一種球類遊戲。 – EquipDev
@EquipDev Scipy被認爲是Python核心包之一。也許python不是你的語言。在沒有scipy/numpy的情況下使用python進行數據分析就像使用沒有工具箱的matlab。 –
如果您在Windows中安裝scipy時遇到困難,請使用此whl文件。 http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy –