packages feed

remote-0.1: examples/kmeans/MakeData.hs

module Main where

import System.Random (randomR,getStdRandom)
import System.Environment
import KMeansCommon
import Data.Binary
import System.IO
import Data.Array.Unboxed
import qualified Data.ByteString.Lazy as B


-- vectorsPerFile = 80000 -- should be 80000
numClusters = 10
vectorDimensions = KMeansCommon.vectorSize
minValue = -1.0
maxValue = 1.0

val = getStdRandom (randomR (minValue,maxValue))
vector = do vals <- mapM (const val) [1..vectorDimensions]
            return $ Vector $! listArray (0,vectorDimensions-1) vals
file vectorsPerFile = mapM (const vector) [1..vectorsPerFile]

clusters = mapM (\x -> do v <- vector
                          return $ Cluster {clId = x,clCount=1,clSum=v}) [1..numClusters]
            

makeBig :: Int -> IO ()
makeBig i = do c <- clusters
               withFile "kmeans-points" WriteMode (\h -> mapM (\_ -> do a <- vector ; hPutStrLn h (show a)) [1..i] )  
               writeFile "kmeans-clusters" $ show c

main = do a <- getArgs
          case a of
            ["big",a] -> makeBig (read a)
            _ -> putStrLn "Syntax:\n\tMakeData big 8\n\t\nOutput is in kmeans-points and kmeans-clusters"