You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维数组重叠轴向矩形切片求和的自动拆分方法咨询

二维数组重叠矩形切片求和的共享项拆分方案

核心思路

利用二维前缀和实现共享区域的自动复用:将所有矩形切片的求和转化为前缀和的四则运算,无需手动拆分共享项——前缀和会一次性预计算所有子区域的和,所有重叠区域的计算都会自动复用已有的前缀和结果。

具体实现步骤

  • 预计算二维前缀和数组
    定义前缀和数组prefix,其中prefix[i][j]代表原数组从左上角(0,0)到(i-1,j-1)的区域和(采用左闭右开的索引规则,适配JAX的切片习惯)。计算代码如下:

    import jax.numpy as jnp
    
    def compute_prefix_sum(arr):
        # 先沿行累加,再沿列累加
        row_cumsum = jnp.cumsum(arr, axis=1)
        prefix = jnp.cumsum(row_cumsum, axis=0)
        # 补全边界,简化从0开始的切片计算
        prefix = jnp.pad(prefix, ((1, 0), (1, 0)), mode='constant')
        return prefix
    
  • 将矩形切片求和映射为前缀和组合
    对于任意矩形切片(范围为x1 ≤ x < x2,y1 ≤ y < y2),其区域和可通过前缀和的四则运算直接得到:

    def slice_sum(prefix, x1, y1, x2, y2):
        return prefix[x2, y2] - prefix[x1, y2] - prefix[x2, y1] + prefix[x1, y1]
    

    所有重叠区域的计算会自动复用前缀和中的公共节点,完全避免重复计算共享项。

JAX编译阶段适配要点

  • 由于编译阶段数组值未知,可将前缀和计算与切片求和逻辑封装在jax.jit装饰的函数中,JAX会在编译时自动优化计算流程,识别并复用公共计算项。
  • 若切片坐标为编译时已知的固定值,可提前固化每个切片的(x1,y1,x2,y2)参数,编译时JAX会直接生成对应前缀和组合的高效GPU代码。
  • 若切片坐标为运行时动态传入,只需将前缀和计算与动态切片求和逻辑放在同一JIT函数内,JAX会自动处理动态索引的优化。

优势说明

这种方法通过空间换时间,用一次O(mn)的前缀和计算,将所有后续矩形求和操作降为O(1),完美适配大量重叠切片的场景。拆分逻辑完全在编译阶段完成,无需运行时额外处理,符合你的GPU计算前置需求。

内容的提问来源于stack exchange,提问作者Olli Niemitalo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:33:12