2010-05-11 71 views

回答

3

Jama工作得很好。

0

如果您使用C++和NDK,則可以使用Eigen。它可以使用SSE 2/3/4,ARM NEON和AltiVec指令集。

7

傳統的線性代數庫在層中實現。 Basic Linear Algebra Subprogram (BLAS)位於底層。 Linear Algebra Package (LAPACK)建立在BLAS之上。這兩個層庫的接口在20世紀90年代被標準化,硬件廠商通常會爲其架構提供各種定製實現。 LAPACK提供了你提到的線性代數庫操作(SVD,QR,LU,最小二乘法,逆等)。在最近幾年,出現了一些更加用戶友好的線性代數庫(例如Armadillo,Eigen),它們實際上爲傳統的BLAS和LAPACK庫提供了一些包裝。

JBLAS只是傳統BLAS的java實現。 JAMA也是一個用Java實現的LAPACK類庫。這兩個庫非常適合Android。但是由於Android編程通常涉及Java,因此我們可以使它們在Android上工作。但是,我們無法期望這些實現的性能。我的觀點是,性能是一個關鍵因素,因爲您正在調用庫而不是自己編寫庫,並且高性能通常會在Android OS的移動平臺中提高低能耗成本。雖然上述線性代數庫通常以CPU(例如x86架構,操作系統:Linux/Windows/MacOS)爲目標,但專家們正在取得進展,同時在移動平臺(例如ARM,OS:Android) 。

我剛注意到高通剛剛發佈了自己的類BLAS庫Snapdragon Math Library,它可以在高通定製的ARM架構上運行。在頂級LAPACK鏈接到它,這些線性代數運算(SVD,QR,LU,最小二乘,逆等)可以在Android上以高性能實現。

+0

謝謝丹!我剛剛編輯了我的答案。希望它更獨立。 – 2015-12-19 04:18:04