问题标签 [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.

0 投票
0 回答
82 浏览

haskell - 运行 iterateM_ 特定次数 (Haskell)(Repa)

我有一个模拟,其中每一步的结果都是下一步的输入。模拟本身使用 IO Monad (Repa:ComputeP),我想在运行时将每个步骤的结果写入文件。

我能想到的最接近的是iterateM_模拟步骤上的操作,但这将永远运行。有没有办法只调用iterateM_特定次数?

相关代码:

(或者我想做的事情有更好的选择)

0 投票
0 回答
194 浏览

arrays - 更改 repa 数组中单个值的有效方法

我尝试使用Gloss.Raster.Array有效地在屏幕上绘制一组点。它使用一个Array D DIM2 Color作为点的容器来绘制。目前它是一个 500x500 的数组,代表一个“位图”。

假设每一帧我生成 1 个新点来显示。

我没有找到另一种方法来调整现有的 repa 数组以包含单个新点,而不是执行 repa traverse,它看起来大致如下:

我怀疑这可能会变得相当低效:为了一点而遍历整个 500x500 数组。但我想也许 ghc 会做一些优化魔法,但它不会。

原来是这样。我试图分析它,它说这newarr需要 97.2% 的时间。而且它的工作速度也很慢。

我对整个 haskell 和 repa 生态系统有点陌生,迈出了第一步,所以我可能不知道什么或做错了什么(在我的 repo 代码或我的分析尝试中) - 因此寻求帮助:)

是否有一些高效的方法可以在每帧上更改 repa 数组中的单个值?或者,如果我想在每一帧上加 500 分,那么答案是什么?

0 投票
0 回答
100 浏览

haskell - Repa 中的行或列操作

在 Repa (Haskell) 中有没有办法直接执行行操作?

我想对二维数组的每一行做一个 fft,但这似乎是不可能的。由于我不想编写自己的 fft 算法,因此如果我可以将 fft(来自 Repa.FFTW)直接应用于每一行,从而产生与原始矩阵大小相同的矩阵,那就太好了。

我尝试编写自己的 dft 函数,但性能非常糟糕。代码如下。

我尝试使用 ghc-core 对此进行分析,但没有发现任何可能影响性能的内容。尽管我对核心的了解非常有限,但我可能完全错了。

谢谢,

0 投票
1 回答
135 浏览

haskell - 使用 repa 时将 Identity monad 与 mmultP 一起使用有什么问题?

我不明白为什么这个程序使用repa

给我以下警告:

我没有嵌套计算,我没有调用computeor copy,并且我用来进行计算的所有内容都在同一个 monad 中。这与惰性评估有关吗?如果是这样,我如何在使用 Identity monad 时进行并行计算(以保持整体计算纯粹)?

作为参考,替换runIdentityrunST使其工作,尽管在任何一种情况下都没有使用特定的 monad 的功能。

0 投票
1 回答
111 浏览

haskell - 在编译时检查 repa 中的一组三元组

首先,我是 repa 的新手,我仍然认为自己是 Haskell 的初学者。

我需要一组有效的双打三胞胎。天真的方法会,[(Double, Double, Double)]但那是无效的。我想我可以使用repa,因为它应该非常有效。但是,我不知道应该如何定义一个三元组数组。

我可以Array U DIM2 Double在第二维中存储三元组的元素(即第一个索引是三元组的索引,第二个索引是三元组的元素)。但是,没有什么可以强制第二维只有 3 大小。

我需要类似的东西,Array U DIM1 Vec3D但这是不可能的,Vec3D因为Data.Vector.Unboxed.Base.Unbox.

0 投票
1 回答
159 浏览

arrays - 如何在 repa 中堆叠数组(Haskell)

假设有两个长度相同的一维数组:

现在我想将这两个数组堆叠成一个二维数组,以便这些数组形成行。我怎样才能在repa中做到这一点?

基本上,我正在寻找相当于 numpy 的row_stack

笔记。两个数组xy来自外部,即我无法从头开始创建二维数组。

0 投票
1 回答
112 浏览

haskell - 尝试使用 Repa 包时不在范围内错误

我对 Haskell 比较陌生,我正在尝试Repa在项目中使用包。我已经在我的源代码中使用 导入了包import qualified Data.Array.Repa as R,但是在 ghci 中加载 Haskell 文件时,出现以下错误:

这是使用的源代码部分Repa

似乎没有导入(加载)包。使用ghc-pkg list repa结果如下:

我应该怎么办?

0 投票
0 回答
102 浏览

haskell - 如何应用任意尺寸的 Repa 模板?

在 Repa 包中,有模板允许以方便的方式从相邻值计算值(对于卷积、图像模糊、扩散模拟等很有用)。

在当前的 Repa 包中,我可以制作任何形状的模板,但只能使用mapStencil2. 有没有办法将模板应用于具有不同维度的数组?甚至没有办法应用一维模板。我正在寻找一种应用 3D 模板的方法。

谢谢

0 投票
1 回答
234 浏览

haskell - Haskell Repa - 遍历二维数组

我正在尝试遍历我使用repa创建的二维数组,到目前为止,我有在每个元素上调用的函数,但我不明白存在什么基本概念不会让我在该函数中执行表达式,我到目前为止是如下:

你可以忽略关于纹理和 OpenGL 的东西,这将是一个游戏。当我尝试在 drawTile 函数中使用具有副作用的函数时出现编译错误。我如何在我想要的地方执行某种表达式(例如打印“hello”)?是否有其他更简单的方法可以将函数应用于 repa 数组中的每个元素?

0 投票
1 回答
317 浏览

arrays - Haskell中惰性数组的适当表示

我正在尝试制作一个在一个大型阵列上进行大量更新的程序,但只评估几次。我希望计算尽可能地懒惰,但我找不到哪种数组表示适合我的情况。具体来说,我希望我的数组:

  • 有固定大小
  • 恒定时间访问
  • 更新 O(n) 中的 n 个元素
  • 懒惰评估

如何接近这些要求?作为一个子问题:是否有专门针对此用例的库?


编辑:

也许我的问题不够具体,所以我会尝试更多地解释我的情况。

我试图表示各种尺寸的图像,这些图像可以相对较小(大约 1200x800),也可以比它大得多(至少 8000x8000)。此外,一个图像会有很多层,这意味着如果我想在屏幕上绘制图像,帧缓冲图像会有很多更新。我想如果我可以利用 haskell 的惰性求值特性,我将能够只在帧缓冲区上写入一次,而不是在每次更新时覆盖相同的像素。

我知道在 haskell 中表示数组的几个选项,但所有这些似乎都不适合我的情况。例如:

  • Data.Seq, Data.IntTrie : 不能在固定时间内访问
  • Data.Vector, Data.Array : 更新 n 个元素花费的时间超过 O(n)
  • 未装箱的变体:不是懒惰评估的(我猜?)

在这种情况下我应该采取什么方法?