问题标签 [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.
arrays - 由有界数据类型索引的 Repa 数组?
我想实现类似于标准数组包中的有界数组但使用 repa 数组的东西。
实现这一目标的好方法是什么?
这是我尝试过的,但必须有比将所有内容包装在检查边界的自定义函数中更好的方法:
此外,我尝试为 (sh :. C) 派生一个 Shape 实例,但无济于事,我无法真正了解如何为我的数据类型实现 Shape 类中声明的一些接口。我正在写这个问题,希望其他人有办法,但如果没有,我会再试一次。谢谢!
haskell - 使用 Repa 和 Stencils 重新采样
我用 repa 编写了一个简单的图像双线性重采样算法,因为我需要使用分区数组来使其正确,所以我想我会全力以赴并使用模板,并希望获得更快的循环。
从我对 mapStencil 工作方式的天真理解来看,我认为这不足以完成我的任务。我需要像 transformStencil 这样的东西。我想我需要一个不同的模板,所以我可以拥有旧索引和新索引。
有没有一种简单的方法可以在 Repa 中执行模板图像重采样?如果不是,将 mapStencil 破解成 transformStencil 或类似的东西会有多难。
haskell - 从 Haskell 的核心中删除带有重复分支的“案例”
我有一段 Haskell 代码,如下所示:
Z
并:.
取自Repa库,定义如下:
表达式 right$
定义了一个数组索引,而 whilef
是一个接受该索引并返回一对的函数。这编译为以下核心:
对我来说,中间 case 语句(带有 as scrutinee 的语句)似乎很明显(也许是错误的># x_s32E 0
)是多余的,因为两个分支是相同的。我能做些什么来摆脱它吗?我使用 Repa 文档中推荐的 GHC 选项编译我的代码:-O2 -Odph -fno-liberate-case -funfolding-use-threshold1000 -funfolding-keeness-factor1000
haskell - 使用 repa 计算图像直方图
我正在从磁盘加载 RGB 图像JuicyPixels-repa
。不幸的是,图像的数组表示是Array F DIM3 Word8
内部维度是 RGB 像素。repa
这与RGB 图像所在的现有图像处理算法有点不兼容Array U DIM2 (Word8, Word8, Word8)
。
我想计算图像的 RGB 直方图,我正在搜索带有签名的函数:
如何折叠我的 3d 数组以获得每个颜色通道的 1d 数组?
编辑:
主要问题不是我无法为每个频道转换DIM3
为DIM2
(通过切片轻松完成)。问题是我必须迭代源图像DIM2
,或者DIM3
必须累积到不同程度DIM1
的数组。所以我不能使用repa ,因为它会将维度减少一,但程度相同。Shape
(Z:.256)
foldS
我也尝试过,traverse
但它迭代目标图像的范围,提供从源图像获取像素的函数,这将导致代码效率非常低,为每个颜色值计算相同的像素。
一个好方法是将Vector
直方图类型作为累加器的简单折叠,但不幸的是我没有基于U
(未装箱)或V
(向量)的数组,我可以从中有效地获得Vector
. 我有一个Array F
(外来指针)。
haskell - 使用 Haskell 和 Repa 动态生成 Roguelike 地下城
我正在开发一个用 Haskell 编写的 roguelike 游戏。我决定使用 将世界表示为 2D 网格Data.Array.Repa
,现在我希望动态生成随机地牢,其中可以包含直的或 90 度转弯的走廊,以及(几乎)任何大小和形状的房间。
我很难找出生成这些地牢的策略。醉汉的步行可能会奏效,但似乎它可能太不稳定并且不会产生很多房间。生成地牢的更好方法是什么?
另外,Data.Array.Repa
在这里使用的数据结构是一个不错的选择吗?
arrays - Haskell repa - 如何减少数组和返回索引?
在 GNU Octave 中,这段代码 -
将返回最小元素及其位置。您如何在 repa 中为任意二进制函数执行此操作?
这就是我想出的:
在上面的示例中,我们将 repa 1D 矩阵转换为列表,并使用带有两个累加器的 foldl'(来自 Data.List)——一个用于计算迭代次数(ix),另一个用于保存最小元素的位置(r)。但是使用 repa 的重点是使用数组,而不是列表!
在 repa 中,Array 类型有两个折叠(foldS 和 foldP) - 但它们只能具有类型 (a -> a -> a) 的功能 - 意思是,我不能将带有累加器的元组传递给它。还有 traverse,原则上可以将一维数组归约为标量数组:
首先想到的是
但这也会将数组转换为列表,而不是对数组进行计算。
haskell - 如何允许统一具有不同类型的类型变量?
我有一个具有以下类型签名的函数
Array
,来自U
Repa图书馆。创建稍后作为元组传递给其他函数的数据。在某一时刻,类型变量与类型统一(这再次来自 Repa),但稍后也应该与类型统一(这是我的类型)。问题是已经统一了,所以不能统一。我以错误告终。我认为这应该通过某种形式的更高级别的类型来解决,但我无法弄清楚应该如何写。谁能帮我一把?DIM1
dataLat
r
D
r
L
D
L
Couldn't match expected type
haskell - 修复性能与列表
在 Numeric Haskell Repa Tutorial Wiki中,有一段内容如下(上下文):
10.1 Fusion,以及为什么需要它
Repa 严重依赖数组融合来实现快速代码。Fusion 是 GHC 在编译程序时执行的内联和代码转换组合的一个奇特名称。融合过程将 Repa 库中定义的数组填充循环与您在自己的模块中编写的“worker”函数合并。如果融合过程失败,那么生成的程序将比它需要的慢得多,通常比使用普通 Haskell 列表的等效程序慢 10 倍。另一方面,如果融合工作正常,生成的代码将与等效的干净编写的 C 程序一样快地运行。一旦你了解了发生了什么,使融合工作并不难。
我不明白的部分是这样的:
“如果融合过程失败,那么生成的程序将比它需要的慢得多,通常比使用普通 Haskell 列表的等效程序慢 10 倍。”
我明白为什么如果流融合失败它会运行得更慢,但为什么它的运行速度比列表慢得多?
谢谢!
arrays - 使用 Repa 并行数组的惯用期权定价和风险
假设我想使用有限差分法为看涨期权定价并重新计算,那么下面的工作就完成了:
但现在假设我想并行定价期权(比如做一个现货阶梯),那么我可以这样做:
问题:
- 在 repa 中是否有更惯用的方式来做到这一点?
- 上述方法实际上会并行定价吗?
- 如何确定我的代码是否真的在生成将并行执行的东西?
我尝试了 3 次,但遗憾的是在 ghc 中遇到了一个错误:
haskell - 如何导入 Repa
我对 Haskell 世界真的很陌生,所以请原谅我这个愚蠢的问题。我安装了 Haskell 平台,我执行cabal install repa
然后尝试在 WinGHCi 中使用此代码加载文件
但我明白了:
有人可以告诉我如何解决找不到模块的问题吗?非常感谢你!