gpt4 book ai didi

python - python中的多维卷积

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:29 24 4
gpt4 key购买 nike

我正在尝试将形状为 (10, 100, 100) 的 3 维值数组与形状为 (10, 100, 100) 的高斯矩阵进行卷积。当我使用卷积函数时,出现值错误。

def gaussian(x, mu, sigma):
g = (1./ (sigma * sqrt(2*pi))) * exp(-(x - mu)**2 / sigma**2)
return g

gauss_I = gaussian( values, mean(values), std(values) )

import numpy as np
np.convolve( values, gauss_I)

convolve(values, gauss_I)

追溯(最近的调用最后):

文件“”,第 1 行,位于 卷积(值,高斯_I)

  File "/Users/Me/Applications/anaconda/lib/python3.5/site-packages/numpy/core/numeric.py", line 1013, in convolve
return multiarray.correlate(a, v[::-1], mode)

ValueError: object too deep for desired array

我也使用了 correlate 函数,但这给了我同样的错误。

最佳答案

一段时间以来,我一直遇到同样的问题。正如评论中已经提到的,函数 np.convolve 仅支持一维卷积。我发现的另一种选择是 scipy 函数 scipy.signal.fftconvolve适用于 N 维数组。

例如,我在这里测试形状为 (100,100,100) 的 3D 数组的卷积

import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as sps

# create 3D meshgrid and function cos(x+y)
bins = np.linspace(-10,10,100)
x, y, z = np.meshgrid(bins, bins, bins)
cos = np.cos(x+y)
print(cos.shape) # (100, 100, 100)

# plot projection of function on x-y plane
plt.title(r'$\cos(x+y)$')
plt.contourf(x[:,:,0], y[:,:,0], np.sum(cos,axis=2))
plt.colorbar()
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')
plt.show()

# perform convolution of function with itself
conv = sps.fftconvolve(cos, cos, mode='same')

print(conv.shape) # (100, 100, 100)

# plot projection of convolution on x-y plane
plt.title('numerical convolution')
plt.contourf(x[:,:,0], y[:,:,0], np.sum(conv,axis=2))
plt.colorbar()
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')
plt.show()

我得到以下图像:

cos

convolution

希望对您有所帮助!

关于python - python中的多维卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123334/

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