高性能Java科学与技术运算库Colt
jopen
9年前
在学习《Machine Learning in Action》和《NLTK Natural Language Processing with Python》的过程中,我真切地感受到Numpy库的便捷与强大,线性代数的数据结构与运算封装得浅显易懂。不过Numpy或者Python有两个很致 命的缺点:①弱类型导致我无法看到深层对象中的注释。②运行效率无法满足生产需要。我在想Java平台上是否有比较成熟的数学库,类似于Numpy这样简 洁强大,同时又文档完整。没想到还真的有,在StackOverflow上有人问“Java equivalent for the Numpy multi-dimensional object”,得票最高的答案就是Colt。
Colt简介
Colt是一个高性能的数学库,由以下几个子库构成:
Colt库:基本的动态数组、稀疏矩阵、线性代数。
Jet库:数理统计、直方图。
CoreJava库:类printf的打印函数,并行计算。
文档
详细的文档在http://acs.lbl.gov/software/colt/api/overview-summary.html
实例
挑我急着用的矩阵来说:
package com.hankcs; import cern.colt.matrix.DoubleMatrix2D; import cern.colt.matrix.impl.DenseDoubleMatrix2D; import cern.colt.matrix.linalg.Algebra; public class Main { public static void main(String[] args) { DoubleMatrix2D matrix; matrix = new DenseDoubleMatrix2D(3,4); //matrix = new SparseDoubleMatrix2D(3,4); // 稀疏矩阵 //matrix = new RCDoubleMatrix2D(3,4); // 稀疏行压缩矩阵 System.out.println("初始矩阵"); System.out.println(matrix); System.out.println("填充"); matrix.assign(new double[][]{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}}); System.out.println(matrix); System.out.println("转置"); DoubleMatrix2D transpose = Algebra.DEFAULT.transpose(matrix); System.out.println(transpose); System.out.println("矩阵乘法"); System.out.println(Algebra.DEFAULT.mult(matrix, transpose)); } }
输出:
初始矩阵 3 x 4 matrix 0 0 0 0 0 0 0 0 0 0 0 0 填充 3 x 4 matrix 1 2 3 4 5 6 7 8 9 10 11 12 转置 4 x 3 matrix 1 5 9 2 6 10 3 7 11 4 8 12 矩阵乘法 3 x 3 matrix 30 70 110 70 174 278 110 278 446
由于Java不能重载运算符,所有的运算符都是通过一个类Algebra实现的。更多运算请参考 http://acs.lbl.gov/software/colt/api/cern/colt/matrix/linalg/Algebra.html
来自: 码农场 » 高性能Java科学与技术运算库Colt