放牧代码和思想
专注自然语言处理、机器学习算法
    This thing called love. Know I would've. Thrown it all away. Wouldn't hesitate.

高性能Java科学与技术运算库Colt

目录

在学习《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

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #2

    似乎现在更加流行的是ND4J,deeplearning4j

    Hsing225年前 (2019-03-12)回复
  2. #1

    在Github找到了这个 https://github.com/rwl/ParallelColt 哈哈
    看来还是有人在维护这个Java线性代数库
    API Documentation :https://rwl.github.io/ParallelColt/

    知乎_上官永庆8年前 (2016-08-21)回复

我的作品

HanLP自然语言处理包《自然语言处理入门》