我一直在通过实现一个特征选择算法来学习一些Haskell.
我从20秒开始将基准数据集的性能提升到5秒,其中C程序在0.5秒内处理相同的数据集.数据集可以在这里找到.要运行,调用编译的二进制像这样:./Mrmr 10 test_nci9_s3.csv.
代码在这里,我有兴趣优化mutualInfoInnerLoop:
mutualInfoInnerLoop :: Double -> Data.Vector.Unboxed.Vector (Int, Int) -> Double -> (Int, Int, Double) -> Double
mutualInfoInnerLoop n xys !acc (!i, !j, !px_py)
| n == 0 || px_py == 0 || pxy == 0 = acc
| otherwise = pxy * logBase 2 ( pxy / px_py ) + acc
where
pxy = ( fromIntegral . U.foldl' accumEq2 0 $ xys ) / n
accumEq2 :: Int -> (Int, …Run Code Online (Sandbox Code Playgroud)