这可能很容易,但我似乎无法弄明白。我试图在下面实施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
答案 0 :(得分:1)
如果您使用住宿和早餐0.4.3,您的代码将不会被修改。
当我使用版本0.1.2时,我得到索引越界错误。
但是,使用GHC 7.10.2编译0.4.3需要对源进行一些黑客攻击。如果您有兴趣,我可以提供详细信息。
从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