【发布时间】:2011-09-04 10:17:29
【问题描述】:
我正在尝试使用 Repa 实现累积和函数,以计算积分图像。我当前的实现如下所示:
cumsum :: (Elt a, Num a) => Array DIM2 a -> Array DIM2 a
cumsum array = traverse array id cumsum'
where
elementSlice inner outer = slice array (inner :. (0 :: Int))
cumsum' f (inner :. outer) = Repa.sumAll $ elementSlice inner outer
问题出在 elementSlice 函数中。在 matlab 或说 numpy 中,这可以指定为 array[inner,0:outer]。所以我正在寻找的是类似的东西:
slice array (inner :. (Range 0 outer))
但是,似乎不允许在 Repa 中的当前范围内指定切片。我考虑过使用 Haskell 中的高效并行模板卷积中讨论的分区,但如果每次迭代都会更改它们,这似乎是一种相当重量级的方法。我还考虑过屏蔽切片(乘以二进制向量) - 但这似乎在大型矩阵上表现很差,因为我将为矩阵中的每个点分配一个屏蔽向量......
我的问题 - 有谁知道是否有计划在 Repa 中添加对范围内切片的支持?或者有没有一种我已经可以解决这个问题的高效方法,也许用不同的方法?
【问题讨论】: