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

2024-06-26 12:43:00 发布

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

我正在将[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)

Tags: 数据代码datanprgbfilterfilters形状
1条回答
网友
1楼 · 发布于 2024-06-26 12:43:00

您可以使用^{}

对于datacube作为4D情况-

data_collapsed = np.tensordot(datacube,filters,axes=(1,0))

对于3D病例-

data_collapsed = np.tensordot(datacube,filters,axes=(0,0))

Related post to understand ^{}

相关问题 更多 >