Skip to content

tel/clatrix

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Clatrix matrix

A stupid name for a smart matrix library, because who doesn't love smart matrices? Being implemented as a data type around the native BLAS hooks of jblas gives it speed. Being implemented as a Clojure sequence makes it clever.

Clatrix works as an implementation of core.matrix so it is fully compatible with other libraries and tools that use the core.matrix API.

Clojars Project

Usage

For now, you can read the Marginalia documentation or take a look at a few examples below. (Note: To be updated!)

(in-ns 'clatrix.core)

(matrix (repeat 5 (range 10)))

; A 5x10 matrix
; -------------
; 0.00e+00  1.00e+00  2.00e+00  .  7.00e+00  8.00e+00  9.00e+00
; 0.00e+00  1.00e+00  2.00e+00  .  7.00e+00  8.00e+00  9.00e+00
; 0.00e+00  1.00e+00  2.00e+00  .  7.00e+00  8.00e+00  9.00e+00
; 0.00e+00  1.00e+00  2.00e+00  .  7.00e+00  8.00e+00  9.00e+00
; 0.00e+00  1.00e+00  2.00e+00  .  7.00e+00  8.00e+00  9.00e+00


(from-indices 5 5 *)

; A 5x5 matrix
; ------------
; 0.00e+00  0.00e+00  0.00e+00  0.00e+00  0.00e+00
; 0.00e+00  1.00e+00  2.00e+00  3.00e+00  4.00e+00
; 0.00e+00  2.00e+00  4.00e+00  6.00e+00  8.00e+00
; 0.00e+00  3.00e+00  6.00e+00  9.00e+00  1.20e+01
; 0.00e+00  4.00e+00  8.00e+00  1.20e+01  1.60e+01

(time (solve (rand 1000 1000) (rand 1000)))

; "Elapsed time: 158.216 msecs"
; ....

(time (rank (rand 1000 1000)))

; "Elapsed time: 13469.51 msecs"
; 1000

(let [A (rand 10 14)
      B (* A (t A))     ; B is symmetric
      lu (lu B)
      P (rspectral 10)  ; `respectral` makes positive definite matrices
      G (cholesky P)]   ; so we can get their square root
  (and (= A (c/t (c/t A)))
       (= B (* (:p lu) (:l lu) (:u lu)))
       (= P (* (t G) G))))

; true

Copyright © 2012 Joseph Abrahamson and contributors (see LICENSE.txt)

About

A stupid name for a smart matrix library, because who doesn't love smart matrices?

Resources

License

Stars

Watchers

Forks

Packages

No packages published