haskell - 类型安全的矩阵乘法

标签 haskell matrix matrix-multiplication

Write this Scala Matrix multiplication in Haskell 上的冗长讨论之后,我想知道......类型安全的矩阵乘法会是什么样子?所以这是你的挑战:要么链接到 Haskell 实现,要么自己实现以下内容:

data Matrix ... = ...

matrixMult :: Matrix ... -> Matrix ... -> Matrix ...
matrixMult ... = ...

在哪里 matrixMult如果您尝试将两个具有不兼容维度的矩阵相乘,则会在编译时产生类型错误。如果你链接到讨论这个精确主题的论文或书籍,和/或讨论你自己这个功能的有用/无用,Brownie 点。

最佳答案

有许多包可以实现这一点:

  • http://hackage.haskell.org/package/hmatrix-static
  • http://hackage.haskell.org/packages/archive/repa-algorithms/2.2.0.1/doc/html/Data-Array-Repa-Algorithms-Matrix.html
  • http://hackage.haskell.org/packages/archive/blas/0.7.6/doc/html/Data-Matrix-Dense.html#t:Matrix
  • http://hackage.haskell.org/package/Vec

  • 尤其是 Repa 论文对设计空间和做出的选择进行了非常好的讨论:http://repa.ouroborus.net/

    具有历史意义的是 McBride 的 "Faking It"从 2001 年开始,它描述了强类型向量。他采用的技术与上述软件包中使用的技术非常相似。他们显然在从事依赖类型编程的圈子中广为人知,但我的印象是“Faking It”论文是在 Haskell 中使用这些的早期实例之一。奥列格的 2005 Monad Reader article on number-parameterized types 也对这些技术的历史进行了一些很好的讨论。

    关于haskell - 类型安全的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332392/

    相关文章:

    haskell - 当使用 `DerivingVia` ` 等光学类型时,无法在 `Prism' 期间进行强制

    Haskell 元组构造函数 (GHC) 以及语言与其实现之间的分离

    c++ - 在 C 或 C++ 中是否有用于矩阵计算的开源模板库?

    c - 矩阵中存在障碍物的路径数

    haskell - "Couldn' t 使用 Codec.BMP 时将预期类型与实际类型匹配”错误

    haskell - 基本程序无法加载 (Haskell)

    R ave 还是申请?通过具有 strata 变量的函数添加列,但快速且多列

    c++ - 使用 BLAS 将实矩阵与复 vector 相乘

    algorithm - 如何尽可能快地进行矩阵计算

    opencv - 将 OpenCV 的 Mat 容器与用于矩阵乘法的 blas 接口(interface)