【问题标题】:convolve a higher dimensional cube with a 2d array将高维立方体与二维数组卷积
【发布时间】:2019-05-16 08:06:56
【问题描述】:

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

【问题讨论】:

    标签: python arrays numpy matrix


    【解决方案1】:

    您可以使用np.tensordot

    对于datacube4D 的情况-

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

    对于3D 案例-

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

    Related post to understand tensordot.

    【讨论】:

    • 哇,好用! 3D 示例的坐标轴是什么?
    • @Coolcrab 已针对这两种情况进行了编辑。
    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2021-11-12
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多