用二维数组卷积一个高维立方体

3

我在使用一个形状为[nLambda,nX,nY]的3D数据立方体和一个形状为[nLambda,3]的滤波器进行卷积。我已经成功地将其应用于这种情况,但我需要在大量被保存为[nt,nLambda,nX,nY]的立方体上重复此过程。我想扩展我的代码来应对这种情况,但我一直搞乱了平铺的过程。有没有人知道如何做到这一点?

我的当前程序执行以下操作:

datacube.shape         = [21,100,100]
filters.shape          = [21,3]
data_collapsed.shape   = [100,100,3]   

我希望它能够执行

datacube.shape         = [10,21,100,100]
filters.shape          = [21,3]
data_collapsed.shape   = [10,100,100,3]     

我用于 3D 方块的代码

nl,nx,ny = datacube.shape
filter_rgb = np.tile(filters, (ny,nx,1,1))
filter_rgb = np.swapaxes(filter_rgb, 0,2)
data_rgb = np.tile(datacube,(3,1,1,1))
data_rgb = np.swapaxes(data_rgb,0,-1)
data_filtered = data_rgb * filter_rgb
data_collapsed = np.sum(data_filtered, axis=0)
1个回答

1
你可以使用np.tensordot
对于datacube作为4D情况 -
data_collapsed = np.tensordot(datacube,filters,axes=(1,0))

对于3D情况 -
data_collapsed = np.tensordot(datacube,filters,axes=(0,0))

了解 tensordot 的相关文章


哦,哇,那个可行!3D示例的轴是什么? - Coolcrab
1
@Coolcrab 编辑了两种情况。 - Divakar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接