12

我需要什么?[无序列表]

  • 非常简单的并行化
  • 支持地图,过滤器等。
  • 高效执行基于数组的计算的能力,例如 A=B+C,有点像 matlab 数组。
  • SIMD 代码的生成。我想这在不久的将来是不可能的,但是嘿,我可以问:)
  • 对矩阵的支持至少应该存在,现在更高的维度是较低的优先级。
  • 能够获得指向它的指针并从 C 指针创建一个。
  • 来自其他库的支持。IE,绑定到流行的 C 数学包,i/o 到磁盘或图像(如果数组是 2D)

我看到了什么?

  • haskell 平台中的数组包。这是有福的,可以并行
  • 数据.向量。有循环融合,但没有在平台上,所以它的成熟度对我来说是未知的。
  • repa 包,由 DPH 团队贡献,但现在不能与任何稳定的 ghc 一起使用
  • 对数组实现的支持水平有很多变化。例如,似乎没有一种简单的方法可以将 2D 矢量转储到图像文件中。IOW,haskell 社区显然还没有解决数组实现。

所以,请帮我选择。

EDIT A=B+C 指的是元素加法,而不是列表连接

4

3 回答 3

8

正确,社区还没有确定一个好的数组实现。我认为提出 Vector API 并删除 Data.Array 将是一个很好的 Haskell Prime 提交。

Vector很成熟!它有:

  • 非常简单的并行化
  • 支持地图过滤器等。
  • 有效地执行基于数组的计算,例如 A=B+C (但我不了解 matlab 是如何做到的)
  • 通过 Vector.Storable 从指针创建向量

它不是:

  • 从其他库获得足够的支持。IE,绑定到流行的 C 数学包
  • 支持矩阵,但你可以有向量的向量。如果您构建一些基于向量的矩阵运算,那么也许您可以将其作为向量矩阵上传到 hackage。
  • 生成 SIMD 代码。

注意:您可以将字节串转换为任何向量,因此,如果您将图像作为字节串,那么通过 Vector.Storable,您可以将图像作为矢量执行您想要的操作。

于 2011-03-04T16:58:45.800 回答
3

(我不允许评论)

rpg:hmatrix 接受Data.Vector吗?它有一个Data.Packed.Vector,但它们是一样的吗?

是的。hmatrix 的最后一个版本默认Data.Vector.Storable使用一维向量(以前它是可选的)。在 Hackage 中没有显示对 vector 的依赖,可能是因为它在配置标志中。

对于 LAPACK 兼容性矩阵不是VectorVector t,但它们可以很容易地转换(例如:Data.Vector.fromList . toRows)。

于 2011-03-11T17:58:24.497 回答
2

如果您想绑定到流行的 C 库,最好的选择可能是hmatrixblas。Blas 只是对 BLAS 库的绑定,而 hmatrix 提供了一些更高级别的操作。还有许多基于 hmatrix 构建的库,提供更多功能。如果你正在做任何类型的矩阵工作,这就是我要开始的。

矢量包也是不错的选择;它稳定并提供出色的性能。这些Data.Vector.Storable类型表示为 C 数组,因此将它们连接到其他 C 库是微不足道的。最大的缺点是没有矩阵支持,所以你必须自己做。

至于导出为图像格式,大多数 haskell 图像库似乎都使用 ByteStrings。您可以转换为 ByteString,或绑定到您想要的 C 库。如果你找到了一个能满足你需求的 Haskell 库,那么将 hmatrix 数据转换为正确的格式应该很容易。

于 2011-03-04T16:51:59.360 回答