[英]How to perform Gaussian pooling on a 2d array using numpy
给定一个 2D(M x N) 矩阵和一个 2D Gaussian Mask(K x K),我如何返回一个矩阵,该矩阵是使用给定内核对图像进行高斯池化的结果?
如果可能,我想使用 numpy(不使用“for”,只使用 numpy)例如 2x2 高斯池:(这可能是错误的答案)
matrix:
array([[ 20, 200, -5, 23, 10, -50],
[ -13, 134, 119, 100, 45, -79],
[ 120, 32, 49, 25, 13, 0],
[ 40, 12, 59, 23, 32, -1],
[ 75, 121, 69, 67, 64, -7],
[ 39, 12, 79, -8, 16, -9]])
kernel:
array([[ 1/16, 1/8, 1/16],
[ 1/8, 1/4, 1/8],
[ 1/16, 1/8, 1/16]])
soln:
array([[ 87.25, 16.625],
[ 64.8125, 29.8125]])
首先将您的 M x N 矩阵转换为 (M//K) x K x (N//K) x K 数组,然后在第二和第四维逐点乘以核,然后在第二和第四维求和。
np.sum(
matrix.reshape((
matrix.shape[-2] // kernel.shape[-2], kernel.shape[-2],
matrix.shape[-1] // kernel.shape[-1], kernel.shape[-1],
))
* kernel[np.newaxis, :, np.newaxis, :],
axis=(-3, -1),
)
您还可以通过np.tensordot
调用替换 pointwise-multiply-then-sum。
np.tensordot(
matrix.reshape((
matrix.shape[-2] // kernel.shape[-2], kernel.shape[-2],
matrix.shape[-1] // kernel.shape[-1], kernel.shape[-1],
)),
kernel,
axes=(
(-3, -1),
(-2, -1),
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.