高性能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 ... linalg/Algebra.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM