问题标签 [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 - 运行 iterateM_ 特定次数 (Haskell)(Repa)
我有一个模拟,其中每一步的结果都是下一步的输入。模拟本身使用 IO Monad (Repa:ComputeP),我想在运行时将每个步骤的结果写入文件。
我能想到的最接近的是iterateM_
模拟步骤上的操作,但这将永远运行。有没有办法只调用iterateM_
特定次数?
相关代码:
(或者我想做的事情有更好的选择)
arrays - 更改 repa 数组中单个值的有效方法
我尝试使用Gloss.Raster.Array
有效地在屏幕上绘制一组点。它使用一个Array D DIM2 Color
作为点的容器来绘制。目前它是一个 500x500 的数组,代表一个“位图”。
假设每一帧我生成 1 个新点来显示。
我没有找到另一种方法来调整现有的 repa 数组以包含单个新点,而不是执行 repa traverse
,它看起来大致如下:
我怀疑这可能会变得相当低效:为了一点而遍历整个 500x500 数组。但我想也许 ghc 会做一些优化魔法,但它不会。
原来是这样。我试图分析它,它说这newarr
需要 97.2% 的时间。而且它的工作速度也很慢。
我对整个 haskell 和 repa 生态系统有点陌生,迈出了第一步,所以我可能不知道什么或做错了什么(在我的 repo 代码或我的分析尝试中) - 因此寻求帮助:)
是否有一些高效的方法可以在每帧上更改 repa 数组中的单个值?或者,如果我想在每一帧上加 500 分,那么答案是什么?
haskell - Repa 中的行或列操作
在 Repa (Haskell) 中有没有办法直接执行行操作?
我想对二维数组的每一行做一个 fft,但这似乎是不可能的。由于我不想编写自己的 fft 算法,因此如果我可以将 fft(来自 Repa.FFTW)直接应用于每一行,从而产生与原始矩阵大小相同的矩阵,那就太好了。
我尝试编写自己的 dft 函数,但性能非常糟糕。代码如下。
我尝试使用 ghc-core 对此进行分析,但没有发现任何可能影响性能的内容。尽管我对核心的了解非常有限,但我可能完全错了。
谢谢,
haskell - 使用 repa 时将 Identity monad 与 mmultP 一起使用有什么问题?
我不明白为什么这个程序使用repa:
给我以下警告:
我没有嵌套计算,我没有调用compute
or copy
,并且我用来进行计算的所有内容都在同一个 monad 中。这与惰性评估有关吗?如果是这样,我如何在使用 Identity monad 时进行并行计算(以保持整体计算纯粹)?
作为参考,替换runIdentity
为runST
使其工作,尽管在任何一种情况下都没有使用特定的 monad 的功能。
haskell - 在编译时检查 repa 中的一组三元组
首先,我是 repa 的新手,我仍然认为自己是 Haskell 的初学者。
我需要一组有效的双打三胞胎。天真的方法会,[(Double, Double, Double)]
但那是无效的。我想我可以使用repa,因为它应该非常有效。但是,我不知道应该如何定义一个三元组数组。
我可以Array U DIM2 Double
在第二维中存储三元组的元素(即第一个索引是三元组的索引,第二个索引是三元组的元素)。但是,没有什么可以强制第二维只有 3 大小。
我需要类似的东西,Array U DIM1 Vec3D
但这是不可能的,Vec3D
因为Data.Vector.Unboxed.Base.Unbox
.
arrays - 如何在 repa 中堆叠数组(Haskell)
假设有两个长度相同的一维数组:
现在我想将这两个数组堆叠成一个二维数组,以便这些数组形成行。我怎样才能在repa中做到这一点?
基本上,我正在寻找相当于 numpy 的row_stack
:
笔记。两个数组x
和y
来自外部,即我无法从头开始创建二维数组。
haskell - 尝试使用 Repa 包时不在范围内错误
我对 Haskell 比较陌生,我正在尝试Repa
在项目中使用包。我已经在我的源代码中使用 导入了包import qualified Data.Array.Repa as R
,但是在 ghci 中加载 Haskell 文件时,出现以下错误:
这是使用的源代码部分Repa
:
似乎没有导入(加载)包。使用ghc-pkg list repa
结果如下:
我应该怎么办?
haskell - 如何应用任意尺寸的 Repa 模板?
在 Repa 包中,有模板允许以方便的方式从相邻值计算值(对于卷积、图像模糊、扩散模拟等很有用)。
在当前的 Repa 包中,我可以制作任何形状的模板,但只能使用mapStencil2
. 有没有办法将模板应用于具有不同维度的数组?甚至没有办法应用一维模板。我正在寻找一种应用 3D 模板的方法。
谢谢
haskell - Haskell Repa - 遍历二维数组
我正在尝试遍历我使用repa创建的二维数组,到目前为止,我有在每个元素上调用的函数,但我不明白存在什么基本概念不会让我在该函数中执行表达式,我到目前为止是如下:
你可以忽略关于纹理和 OpenGL 的东西,这将是一个游戏。当我尝试在 drawTile 函数中使用具有副作用的函数时出现编译错误。我如何在我想要的地方执行某种表达式(例如打印“hello”)?是否有其他更简单的方法可以将函数应用于 repa 数组中的每个元素?
arrays - Haskell中惰性数组的适当表示
我正在尝试制作一个在一个大型阵列上进行大量更新的程序,但只评估几次。我希望计算尽可能地懒惰,但我找不到哪种数组表示适合我的情况。具体来说,我希望我的数组:
- 有固定大小
- 恒定时间访问
- 更新 O(n) 中的 n 个元素
- 懒惰评估
如何接近这些要求?作为一个子问题:是否有专门针对此用例的库?
编辑:
也许我的问题不够具体,所以我会尝试更多地解释我的情况。
我试图表示各种尺寸的图像,这些图像可以相对较小(大约 1200x800),也可以比它大得多(至少 8000x8000)。此外,一个图像会有很多层,这意味着如果我想在屏幕上绘制图像,帧缓冲图像会有很多更新。我想如果我可以利用 haskell 的惰性求值特性,我将能够只在帧缓冲区上写入一次,而不是在每次更新时覆盖相同的像素。
我知道在 haskell 中表示数组的几个选项,但所有这些似乎都不适合我的情况。例如:
- Data.Seq, Data.IntTrie : 不能在固定时间内访问
- Data.Vector, Data.Array : 更新 n 个元素花费的时间超过 O(n)
- 未装箱的变体:不是懒惰评估的(我猜?)
在这种情况下我应该采取什么方法?