您可能对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 已经被 Rich Hickey 批准为官方 Clojure 贡献库,Incanter 很可能在未来会转而使用 core.matrix。
SQL 表支持不直接包含在 core.matrix 中,但它只是将结果集从clojure.java.jdbc转换为 core.matrix 数组的一种方式。像下面这样的东西应该可以解决问题:
(coerce [] (map vals resultset))
然后,您可以随意使用 core.matrix 对其进行转换和处理。