我有兴趣使用Linear
library中的Linear.V
来编写对编译时已知大小的矩阵运算。但是,我不确定如何使用此库。我在哪里可以找到更多关于如何使用它的参考资料?
答案 0 :(得分:3)
如果没有更多关于你想做什么的知识,这有点棘手,但我会采取刺激措施。 Linear.V
为任何 n 提供 n 维度向量。在linear
中,矩阵被定义为向量矢量 - Linear.Matrix
定义了对这些值的操作。 Linear.Matrix
通过在两个仿函数上进行参数化,可以处理各种大小的矩阵,而Linear.V
确实是Functor
,因此我们可以使用这些操作。
以下无聊的示例显示了如何使用Linear.V
:
{-# LANGUAGE DataKinds #-}
import Linear
import Linear.V
import Data.Vector
identity :: V 2 (V 2 Float)
identity = V (fromList [ V (fromList [1, 0]), V (fromList [0, 1]) ])
calculation :: V 2 (V 2 Float)
calculation = identity !*! identity
它很无聊,因为它只是计算两个身份矩阵的乘积,但它应该让你知道如何把这些碎片组合在一起。我使用GHC 7.6+类型文字来指定identity
是 2x2 矩阵。
请注意,使用V
构造函数有点危险 - 它允许您“欺骗”#34;关于矢量的大小。例如,如果您执行以下操作:
identity :: V 2 (V 2 Float)
identity = V (fromList [ V (fromList [1, 0]) ])
事情很可能非常错误。使用fromVector
更安全,或者tabulate
(tabulate
使用V
的表示 - 这基本上是从元素索引到其值的函数)。