是否可以在Repa中计算一个依赖于过去值(即较小的索引)的数组?给出了数组的初始部分(例如a[0]
)。 (请注意,我使用类似C的符号表示数组的元素;请不要混淆。)
我阅读了tutorial并迅速检查了黑客行为,但是我找不到执行此操作的函数。
(我猜想在一维数组中进行这种计算不会在Repa中产生意义,因为您无法并行化它。但是我认为您可以在二维或二维以上的情况下并行化它。)
编辑:
大概我应该更具体地说明我想使用哪种f
。由于在a[i]
是标量的情况下无法并行化,因此让我们集中讨论a[i]
是N个暗的向量的情况。我不需要a[i]
来具有较高的维度(例如矩阵),因为您可以将其“展开”为向量。因此,f
是一个将R ^ N映射到R ^ N的函数。
在大多数情况下,它是这样的:
b = M a[i-1]
a[i][j] = g(b)[j]
其中
b
是N个暗矢量,M
是N x N矩阵(无稀疏假设),而g
是一些非线性函数。我想给定i=1,..N-1
,a[0]
和g
为M
计算它。我希望有一些通用的方法(1)并行化这种类型的计算,并且(2)使诸如b
之类的中间变量的分配高效(在类似C的语言中,您可以重复使用它,如果Repa很好,或类似的库可以像魔术一样做到这一点而不会破坏纯度)。 最佳答案
我看不到Repa的方法。但是有一个Vector:Data.Vector.iterateN构建您想要的矢量。然后Data.Array.Repa.fromUnboxed将其从Vector转换为Repa。
iterateN :: Int -> (a -> a) -> a -> Vector aSource
关于haskell - 如何在Repa中计算a [i] = f(a [i-1])?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11228676/