如何正确执行这个矩阵乘法序列?

时间:2015-09-15 19:45:27

标签: haskell matrix

这可能很容易,但我似乎无法弄明白。我试图在下面实施Mahalanobis距离计算,但是正在执行非法矩阵运算(numRows a' and numCols b'不匹配)。计算应为[1.0,2.2] * [[0.95,-0.15] [-0.15 0.55]] * [[1.0],[2.2]],并给出2.952作为答案。有人看到我错了吗?

import Numeric.Matrix as M
import Data.Maybe 

create :: [[Float]] -> Matrix Float 

create m = M.fromList m

mahalanobisDistance mu x = (transpose (minus x mu)) 
`times` (fromJust (M.inv coVarMatrix)) 
`times` (minus x mu) 
where 
    coVarMatrix = create [[1.1, 0.3], [0.3, 1.9]]

distanceW1 = mahalanobisDistance (create [[1.0], [1.0]])

distanceW2 = mahalanobisDistance (create [[1.5], [1.5]])

main = do 
    let x = create [[1.0], [2.2]]
    print $ distanceW1 x

1 个答案:

答案 0 :(得分:1)

如果您使用住宿和早餐0.4.3,您的代码将不会被修改。

当我使用版本0.1.2时,我得到索引越界错误。

但是,使用GHC 7.10.2编译0.4.3需要对源进行一些黑客攻击。如果您有兴趣,我可以提供详细信息。

构建0.5

的说明

从github repo开始使用版本“0.5”:

https://github.com/scravy/bed-and-breakfast

src/Numeric/Matrix.hs添加foldMap到导入列表中以隐藏Prelude:

-import Prelude hiding (any, all, read, map)
+import Prelude hiding (any, all, read, map, foldMap)

照常安装,例如堆栈:

stack init && stack install

或与cabal:

cabal install