core.matrixに興味があるかもしれません。これは、多次元配列と数値計算機能をClojureに導入するプロジェクトです。まだ非常に活発な開発中ですが、すでに使用可能です。
特徴:
- クリーンで機能的なAPI
- 適切な多次元配列
- Clojureデータを操作する慣用的なスタイル。たとえば、ネストされたベクトル
[[1 2] [3 4]]
は2x2行列として自動的に使用できます。
- 期待する可能性のあるすべてのアレイ再形成機能。
- 通常のすべての行列演算(乗算、スケーリング、行列式など)
- 複数のバックエンドマトリックス実装のサポート(例:高性能のJBLAS(ネイティブコードを使用))
ここにいくつかのサンプルコードを参照してください:
;; a matrix can be defined using a nested vector
(def a (matrix [[2 0] [0 2]]))
;; core.matrix.operators overloads operators to work on matrices
(* a a)
;; a wide range of mathematical functions are defined for matrices
(sqrt a)
;; you can get rows and columns of matrices individually
(get-row a 0)
;; Java double arrays can be used as vectors
(* a (double-array [1 2]))
;; you can modify double arrays in place - they are examples of mutable vectors
(let [a (double-array [1 4 9])]
(sqrt! a) ;; "!" signifies an in-place operator
(seq a))
;; you can coerce matrices between different formats
(coerce [] (double-array [1 2 3]))
;; scalars can be used in many places that you can use a matrix
(* [1 2 3] 2)
;; operations on scalars alone behave as you would expect
(* 1 2 3 4 5)
;; you can do various functional programming tricks with matrices too
(emap inc [[1 2] [3 4]])
core.matrixはRichHickeyによって公式のClojurecontribライブラリとして承認されており、Incanterは将来core.matrixの使用に切り替える可能性があります。
SQLテーブルのサポートはcore.matrixに直接含まれていませんが、結果セットをclojure.java.jdbcからcore.matrix配列に変換するためのワンライナーにすぎません。次のようなものでうまくいくはずです。
(coerce [] (map vals resultset))
次に、core.matrixを使用して、必要に応じて変換および処理できます。