在學習《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。html
Colt簡介api
Colt是一個高性能的數學庫,由如下幾個子庫構成:數組
Colt庫:基本的動態數組、稀疏矩陣、線性代數。數據結構
Jet庫:數理統計、直方圖。函數
CoreJava庫:類printf的打印函數,並行計算。性能
文檔學習
詳細的文檔在http://acs.lbl.gov/software/colt/api/overview-summary.htmlui
實例htm
挑我急着用的矩陣來講:對象
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