是否可以在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-1a[0]gM计算它。我希望有一些通用的方法(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/

10-13 07:08