題:
Java的稀疏矩陣庫
Gabor Szarnyas
2018-07-29 04:26:01 UTC
view on stackexchange narkive permalink

我正在尋找Java中的稀疏矩陣庫,該庫可以在稀疏整數矩陣上進行乘法運算,其中矩陣表示圖的鄰接關係。要求大致如下:庫應能夠加載和乘以10M×10M個元素的幾個矩陣,其中包含大約3個元素。在商用計算機上運行時,每個5M非零元素(約16 GB RAM)。 C ++的 Eigen庫滿足此要求。但是,我找不到適合Java的替代方法。

我查看了以下庫:

我還在創建的 https://java-matrix.org/上找到了一項全面的調查由UJMP的作者撰寫,該書展示了〜2015年的最新技術,並強調了很少有庫支持稀疏矩陣。

另請參閱 GitHub問題,了解MTJ中稀疏矩陣乘法的性能

2010年以來有關C / C ++庫的一個相關問題:尋找C / C ++接口以在Linux中高效地計算巨大的稀疏矩陣

更新(2019年末):我現在已經在這一領域進行了一年多的研究,並確定了稀疏矩陣庫需要滿足的一些要求,以便表達圖形算法並有效地執行它們:

  1. 支持對半環的定義,而不是傳統的加時算術運算法則(例如lor-land,min-plus)
  2. 支持屏蔽操作(僅執行給定操作
  3. 允許多線程執行
  4. ol>

    到目前為止,我找不到能滿足 any em的Java庫>以上要求。因此,我切換到C並使用 SuiteSparse:GraphBLAS

    更新(2020年9月): EJML現在滿足#1的要求,請參見拉動請求引入對半環的支持

我對Java沒有特別的經驗,但是如果您使用Google“ java lapack”,則會獲得很多成功,例如http://www.netlib.org/blas/faq.html、https://en.wikipedia.org/ Wiki / Matrix_Toolkit_Java和https://math.nist.gov/javanumerics/
謝謝!這項研究的挑戰之一是大多數庫都針對中等大小的密集矩陣進行了優化-即使EJML [根據某些基準測試具有出色的性能](https://lessthanoptimal.github.io/Java-Matrix-Benchmark/manual/DescriptionRuntime /),這不符合我的要求,因為我的矩陣太大。
你看到這個答案了嗎? https://softwarerecs.stackexchange.com/questions/211/what-efficiency-matrix-implementations-are-there-for-java?rq=1
不,我沒有-謝謝。不幸的是,MTJ似乎沒有擴大到數百萬。我用MTJ的結果擴展了我的問題。
此後,EJML中有一個錯誤已被修復(https://github.com/lessthanoptimal/ejml/issues/40)。只要非零元素的數量不超過2 ^ 31,您就可以了。稀疏支持是相當新的,因此問題仍然被發現。
謝謝,我在問題中對此做了澄清。
一 回答:
Gabor Szarnyas
2018-09-21 20:28:50 UTC
view on stackexchange narkive permalink

我可以推薦兩個庫。兩者都支持稀疏矩陣,包括矩陣矩陣乘法,矩陣矩陣逐元素乘法和矩陣向量乘法。兩者都是開源的,並且是主動維護的,可以從Maven Central中獲得。

  1. EJML(高效Java矩陣庫)是Apache許可的(ASLv2) - [源代碼] [Maven]。最近(2020年9月)它已擴展為支持 semirings

  2. ojAlgo(“ oj!算法”)是MIT許可的- [源代碼] [Maven]

  3. ol>

    對於我測試的稀疏工作負載, EJML的性能要好得多,因此值得一試。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...