gpt4 book ai didi

haskell - 数组有 zipWith 函数吗?

转载 作者:行者123 更新时间:2023-12-01 12:18:50 27 4
gpt4 key购买 nike

我有两个大小相等的数组,我想按元素组合它们。做这个的最好方式是什么? array 包似乎没有提供 zipWith 等效函数。

我不太愿意做自己的函数,因为我能想到的主要方法是用列表来回转换。我关心速度,我认为这种方式不是最有效的方式。

最佳答案

选项 1:使用 repa .如果您关心它,也可能会从并行性中获得一些性能优势。

选项 2:仅使用 bounds 获取索引。我建议一般避免列表理解;尽管在这种情况下其他答案正确使用了它们,但养成做正确事情的习惯可能是值得的。

zipWithArr f xs ys = listArray (bounds xs) $ fmap (liftA2 f (xs !) (ys !)) (range (bounds xs))

之所以可行,是因为 Haskell 的列表是惰性的,我们通常可以将它们视为控制结构(由于各种优化),尽管我们可以将它们视为容器。此外,GHC 最多为每个 lambda 计算一次表达式,因此通常您不必担心这样做效率低下。

关于haskell - 数组有 zipWith 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com