packages feed

hTensor-0.1.0: examples/array.hs

import Numeric.LinearAlgebra.Array
import Numeric.LinearAlgebra.Array.Util
import Control.Applicative

-- 'listArray' specialized for Array Double
infixl 9 #
(#) :: [Int] -> [Double] -> Array Double
(#) = listArray

(<|) :: Name -> [Array Double] -> Array Double
infixl 8 <|
n <| ls = index n ls

i = ("i" <|)
j = ("j" <|)
k = ("k" <|)

sh x = putStrLn . formatFixed 2 $ x

a = [3,4,2] # [1..]
b = [2,3] # [5,6]
c = 7 :: Array Double
s = [2,2,2,2] # [1..]

t = [3,3,3,3]#[1 ..]!"ijkl"

q = [2,4,3] # (fun <$> r 2 <*> r 4 <*> r 3) !"ijk"
    where r k = [1..k]
          fun = \i j k -> i*2*j-k

mk ds f = ds # map f (sequence $ map (enumFromTo 1 . fromIntegral) $ ds)

m = j [i[2,0,0], i[1,0,1], i[0,3,0]] ~> "ij"

main = do
    putStrLn "8-dimensional array"
    sh $ (replicate 8 2)#[1::Double ..]!(take 8 ['a'..])
    ------------------------
    putStrLn "different display formats"
    sh $ a!"ijk"
    printA "%7.3f" a
    putStrLn . formatScaled 2 $ a!"ijk"
    sh . noIdx $ a
    ------------------------
    putStrLn "array defined using a function"
    sh q
    sh $ mk [2,4,3] (\[i,j,k] -> i*2*j-k) !"ijk"
    ------------------------
    putStrLn "contraction"
    sh t
    sh $ t!"ijkk"
    ------------------------
    putStrLn "tensor product"
    sh $ m
    sh $ (t !"pqrs" * m!"kr") ~> "pqks"
    ------------------------
    putStrLn "automatic conformability"
    sh $ j[1,2,3] + k[10,20]
    sh $ k [m, 3*m-1, 7, i[1,2,3]]