HNumeric: Haskell Numeric Library with pure functionality, R & MATLAB Syntax.

[ bsd3, hnum, library, linearalgebra, numeric, statistics ] [ Propose Tags ] [ Report a vulnerability ]

Please see the README on GitHub at https://github.com/Axect/HNumeric#readme


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.2.0.0, 0.2.1.0, 0.3.0.0, 0.3.1.0, 0.3.2.0, 0.3.3.0, 0.4.0.0, 0.5.0.0, 0.5.0.1, 0.5.0.2
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), normaldistribution, random [details]
License BSD-3-Clause
Copyright 2018 Tae Geun Kim
Author Tae Geun Kim
Maintainer edeftg@gmail.com
Category HNum, library, Numeric, LinearAlgebra, Statistics, bsd3
Home page https://github.com/Axect/HNumeric#readme
Bug tracker https://github.com/Axect/HNumeric/issues
Source repo head: git clone https://github.com/Axect/HNumeric
Uploaded by edeftg at 2018-06-11T16:41:26Z
Distributions NixOS:0.5.0.2
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 5894 total (27 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-06-11 [all 1 reports]

Readme for HNumeric-0.3.2.0

[back to package description]

HNumeric

Travis

Packages

  • HNum.Vector : Contain vector, matrix, linear algebra
  • HNum.Stats : Contain statistical functions

Installation

1. Cabal Install

cabal update
cabal install HNumeric

That's all!

2. Import to Stack project

If you use this package to your own project, then you should change stack.yaml and package.yaml

1) Change stack.yaml

# In stack.yaml
extra-deps:
  - git: https://github.com/Axect/HNumeric.git
    commit: [Latest Commit]
  - normaldistribution-1.1.0.3
  - random-1.1

2) Change package.yaml

# In package.yaml
dependecies:
- base
- HNumeric
- normaldistribution
- random

Then enjoy!

Usage

Import Module

  • HNum.Vector
  • HNum.Stats

Basic Vector Usage

-- HNumeric-0.3.0.0 Documentation

let a = vector [1,2,3] -- Vector declaration
let b = Vector [4,5,6] -- small v and large V are same (for convenient)

-- Print Vector
print a

-- You can (+1) by fmap (Vector is functor)
(+1) <$> a 

-- Or MATLAB-like operator (.+, .-, .*, ./, .^)
a .+ 1 -- do not 1 .+ a (. means position of vector)

-- You can make list from vector
toList a -- [1, 2, 3]

-- You can make vector from list
fromList [1,2,3] -- Vector [1,2,3]

-- You can add (subtract, multiply, divide) vectors
a + b -- Vector [5,7,9]

-- Also dot product is here.
a .*. b -- 1*4 + 2*5 + 3*6 = 32

-- Declare Matrix (Syntactic Sugar)
let c = matrix [[1,2],[3,4]]

-- or Declare using R Syntax
let d = Matrix {val = Vector [5,6,7,8], row = 2, col = 2, byRow = True}

-- Determinant
det c

-- Inverse
inv c

-- Transpose
transpose c

-- Matrix ops with Constant (+, -, *, /, ^)
c .+ 1 -- Matrix [[2,3],[4,5]]

-- Matrix ops with Matrix (+, -)
c + c -- Matrix [[2,4],[6,8]]

-- Matrix Multiplication
c %*% d

-- Matrix - Inverse Multiplication
c %/% d

-- Vector Concatenate
hcat a b -- Vector [1,2,3,4,5,6]
vcat a b -- Matrix [[1,2,3],[4,5,6]]

-- Matrix Concatenate
hcat c d -- Matrix [[1,2,5,6],[3,4,7,8]]
vcat c d -- Matrix [[1,2],[3,4],[5,6],[7,8]]

-- Insert Vector to Matrix
vector [1, 2] .: c -- Matrix [[1,2],[1,2],[3,4]]

Basic Stats Usage

-- Sample Vector (import Vector)
v = vector [1..10]
w = vector [10, 9 .. 1]

-- Mean
mean v

-- Var
var v

-- Std
std v

-- Cov Matrix
cov v w

-- Only Cov
cov' v w

-- Linear Fit
(intercept, slope) = lm v w -- (11.0, -1.0) -- (Intercept, Slope)

-- Linear Fit function
lineFit (intercept, slope) (Vector [1 .. 20])

-- RSS
rss v w

-- RSE
rse v w

DONE

  • Effective Matrix Structure (R-like Structure)
  • Divide and Conquer Matrix Multiplication, Determinant, Inverse

TODO (2018.06.08)

  • DSL Documentation by LaTeX (Soon)
  • Make CSV Package
  • Make DataFrame type