我刚开始研究Repa,并想知道如何实现环绕式的torus 2D数组读/写。 我以前使用ST monad和mutable vectors实现过这个功能,但似乎Repa不支持。 有几种方法可能可行:
我可以'遍历'数组,并在每个元素处自己执行索引包装。 对于简单的stencil,到处应用wrapping逻辑的成本非常严重,所以我需要避免这种方法。
Data.Array.Repa.Stencil不支持我需要的边界条件,但看起来Data.Array.Repa.Algorithms.Convolve支持。文档提到了严重的性能损失
我了解到,可以使用slices遍历数组的子集。 因此,我可以定义一个内部(1,1) - (w-2,h-2),两个水平和两个垂直板块表示边界,然后使用两个不同的函数/ stencils遍历它们,从而得到单个结果数组?是否有任何样本代码或进一步的文档说明?
Repa似乎还有'partitions'的概念,它们可用于实现边界条件吗?
哪种方法最快? 是否有我遗漏的选项?
谢谢!