【发布时间】:2012-08-30 14:13:23
【问题描述】:
我正在寻找具有以下功能的 Haskell 线性代数库:
- 矩阵乘法
- 矩阵加法
- 矩阵转置
- 排名计算
- 矩阵求逆是一个优点
并具有以下属性:
- 任意元素(标量)类型(特别是非
Storable实例的元素类型)。我的元素是Num的一个实例,另外可以计算乘法逆。这些元素在数学上形成一个有限域 (????2256)。这应该足以实现上述功能。 - 任意矩阵大小(我可能需要像 100x100 这样的矩阵大小,但矩阵大小将取决于用户的输入,因此除了内存或可用计算能力之外,它不应受其他任何限制)
- 尽可能快,但我知道,由于任意(非
Int,非Int,Double或类似)类型。当一个元素被触摸时,至少有一个指针被取消引用 - (用 Haskell 编写,这对我来说不是真正的要求,但由于我的元素不是
Storable实例,因此库必须用 Haskell 编写)
我已经非常努力地尝试并评估了所有看起来很有希望的东西(Hackage 上的大多数库都直接声明它们不适合我)。特别是我使用以下方法编写了测试代码:
-
hmatrix,假定为
Storable元素 -
Vec,但 documentation 声明:
低维:虽然维数仅受 GHC 处理的内容限制,但该库适用于 2,3 和 4 维。对于一般线性代数,请查看优秀的 hmatrix 库和 blas 绑定
更新
由于似乎什么都没有,所以我创建了一个project on GitHub,旨在开发这样一个库。当前状态非常极简,根本没有针对速度进行优化,只有最基本的功能有测试,因此应该可以工作。但是如果您有兴趣使用或帮助开发它:联系我(您可以在我的web site 上找到我的邮件地址)或发送拉取请求。
【问题讨论】:
-
Storable是 FFI 的基本元素,允许将值编组为接口代码可以读取的形式。如果没有这个警告,我想这项工作需要完全在 Haskell 中完成。 -
是的,我知道。是的,我正在寻找一个完全用 Haskell 编写的库。把它放在问题中。谢谢!
-
查看
Vec的代码,我认为Low Dimension 警告纯粹是因为它仅在Haskell 中运行而不使用辅助编译库的效率低下。因此建议使用hmatrix。 :-/ -
Vec不是每个可能的矩阵大小都有一种类型吗?它有例如Matrix33这是一个 3x3 矩阵。为了支持 100x100 矩阵,GHC 必须生成很多类型。并且:我认为我需要一个没有静态矩阵大小检查的库,因为我在编译时不知道矩阵大小! -
呵呵,我可能需要...我目前正在写计算机科学/密码学的毕业论文(相当于德国的硕士论文),我已经不得不编写有限域库。事实上,我连接了一个 C++ 库。不知道有没有时间另外实现这样一个矩阵库。我会看到...
标签: haskell matrix linear-algebra