如何在APL中对scan算子做掩码以实现分段连续计数
APL 分段累加(遇0重置)实现方案
方法1:自定义扫描算子(最简洁)
你需要的是扫描过程中遇到0就重置累加值,直接自定义二元函数传入扫描算子即可:
N ← 0 0 0 1 1 1 0 0 1 {⍵ × ⍺ + ⍵}\ N 0 0 0 1 2 3 0 0 1
运算逻辑:
- 二元函数中
⍺为上一步的累加结果,⍵为当前位置的原始值 - 每次累加完成后乘以当前值
⍵,如果当前值为0,累加结果直接重置为0,不会传递到后续区间
方法2:分组累加实现
如果偏好分组处理的思路,可以先生成分组ID再按组累加,完全保留原始位置信息:
idx ← ≠\N ⍝ 数值变化时生成新的分组ID {+\⍵}⌸ idx,N ⍝ 按ID分组累加 0 0 0 1 2 3 0 0 1
内容的提问来源于stack exchange,提问作者mazin
相关产品推荐
相关产品推荐

