问题标签 [repa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - repa 中顺序变换的许多并行应用
在 Repa 中,我想d
在我的数组的最里面的维度上并行应用某个维线性变换,即在所有“列”向量上。
一般来说,这样的变换可以表示为一个矩阵M
,而 的每个条目M*v
只是 与 的适当行的点M
积v
。所以我可以只使用traverse
一个计算适当点积的函数。这成本d^2
工作。
然而,myM
很特别:它采用线性工作顺序算法。例如,M
可能是一个下三角矩阵,1
s 贯穿整个下三角。然后M*v
只是v
(又名“扫描”)的部分和的向量。这些总和可以以一种明显的方式顺序计算,但是需要(i-1)
结果的第 st 项才能i
有效地计算第 th 项。(我有几个这样M
的,所有这些都可以在线性顺序时间内以一种或另一种方式计算。)
我没有看到任何明显的方式来使用traverse
(或任何其他 Repa 函数)来利用M
. 可以做到吗?d^2
当有如此快速的线性工作算法可用时,使用 -work 算法(即使具有丰富的并行性)将是非常浪费的。
(我看过一些旧的 SO 帖子(例如,here)提出了类似的问题,但没有什么与我的情况完全相符。)
更新
根据要求,这里有一些说明性代码,用于M
计算部分和(如上所述)。d
正如我所料,运行时(工作)在数组范围的第二个参数()中超线性增长ext
。这是因为mulM'
仅指定如何计算i
输出的第 th 项,与所有其他项无关。即使在数组的总大小中有一个线性时间算法,但我不知道如何在 Repa 中表达它。
有趣的是,如果我从 中删除定义清单的行array'
,main
那么运行时只会在数组的总大小中线性缩放!因此,当数组“一直向下”延迟时,融合/优化必须以某种方式提取线性工作算法,但没有我的任何明确帮助。这太棒了,但对我来说也不是很有用,因为实际上,我需要调用mulM
清单数组。
haskell - 在 Haskell Data.Array.Repa 中按常数缩放矩阵
在 repa-3.2.3.3 中是否有一种紧凑的方法可以通过常数来缩放矩阵?现在我正在使用这个:
我很困惑,因为这样的函数通常包含在数组库中。
haskell - 带有repa的haskell双精度下溢
我编写了一些代码,使用 repa计算距离矩阵:
它似乎工作。但后来我添加了一个快速检查:
换句话说,被距离 D 分开的两个点应该产生一个看起来像 [0,D,D,0] 的距离矩阵。在我的临时手动测试中,确实如此。但 QuickCheck 很快发现 5.0e-324 的距离会产生 [0,0,0,0] 的距离矩阵
这仅仅是因为双打的精度吗?我是否需要限制 QuickCheck 将发送的可能值?或者这是一个真正的错误?
haskell - 为什么没有用于 repa 数组的 mapM?
背景
我repa
更多地用作“管理”工具。我在:中传递reactive-banana
s 。AddHandlers
Array
Array D DIM2 (AddHandler Bool)
目前我正在使用这个kludge:
所以我可以做这样的事情:
问题
有没有理由不包括在内repa
?
haskell - 如何使用haskell对图像进行傅里叶变换
如何使用haskell对图像进行离散傅里叶变换。我相信这两个库repa-devil和repa-fftw可能会有所帮助,但我不知道如何整合它们。我之所以喜欢这个,是因为我可以尝试混合图像(我有一个绝妙的想法,即我可以简单地根据频率进行加权平均,而不是单独过滤图像然后对其进行平均。)
注意:此外,一旦完成此操作,人们将如何将其重新解释为图像。
注意:我实际上不确定如何准确地应用 dft 图像处理。我已经看过方程式并且知道如何评估它们,并且知道一维的“含义”和二维的粗略想法。我也知道如何使用它以某种方式过滤掉图像的高或低“频率”。我只是不确定使用 dft 生成的复杂频率图像到底有多复杂。
haskell - Haskell repa:两个数组的内积结果错误
编译ghc -O2 -threaded test.hs
但是,当我执行可执行文件时./test +RTS -N1
结果是1.6777216e7
同时./test +RTS -N2
或具有更多核心,
结果是正确的:2.0e7
我的代码有什么问题?
haskell - 在 REPA 数组中绘制矩形的最快方法是什么?
通常,在位图中绘制矩形的一种好方法是循环遍历 2 个边界尺寸并设置单个像素。例如,在伪代码上:
Haskell 的 REPA 等价物是什么?
haskell - Repa 与可变向量性能
我编写了算法的两种实现来计算对称矩阵的所有特征值和特征向量。一种实现使用 REPA 库
而其他实现使用可变向量和 ST monad
该算法是 Jacobi 方法,其描述可在 http://en.wikipedia.org/wiki/Jacobi_eigenvalue_algorithm找到
我已经使用 100 个尺寸为 100 x 100 的矩阵测试了这两种实现,按顺序运行代码,我发现了以下时间:
Jacobi 算法需要对一些矩阵条目进行迭代更新,这意味着大多数矩阵在迭代之间保持不变。因此,我会(错误地)猜到,在 REPA 实现中为每次迭代复制一个新矩阵的成本将大于使用 monad ST 改变矩阵的成本,因为据我所知,REPA 不会改变数组,但复制它。
是 REPA 融合了所有操作并避免在每次迭代中复制新数组吗?还是别的什么?
有人可以评论这个结果吗?
arrays - Haskell - 从坐标元组的一维列表构建一个三维数组
我有一个 3D 坐标 (x,y,z) 列表,它在每个位置指定一个标量值 (rho),我已将其加载到 repa 数组中:
即每个数组元素是一个4元组,代表(x,y,z,rho)。此外,我不依赖于使用 repa。
我想将其转换为 DIM3 数组,每个位置都包含适当的 rho 值(或默认值,或者可能是插值)。
我想不出一种方法来做到这一点traverse
(至少效率不高),因为traverse
使用来自新数组的索引,而不是源数组。repa 是否有可能,还是我需要使用不同的数组库(甚至是可变的)?