Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式碼規範

基礎線性代數程式庫

uBLAS 是一個 C++ 樣板類別函式庫,它為稠密、壓縮和稀疏矩陣提供 BLAS 級別 1、2、3 的功能。透過運算子多載統一數學符號,並透過表達式樣板實現高效的程式碼生成。

功能

uBLAS 提供了用於稠密、單位和稀疏向量,以及稠密、單位、三角、帶狀、對稱、埃爾米特和稀疏矩陣的 C++ 樣板類別。可以透過範圍、切片、配接器類別和間接陣列來建構向量和矩陣的視圖。該函式庫涵蓋了向量和矩陣上常見的基礎線性代數運算:例如不同範數的約簡、向量和矩陣的加法和減法以及與純量的乘法、向量的內積和外積、矩陣向量積和矩陣乘積,以及三角求解器。容器、視圖和表達式樣板運算之間的黏合劑是一個大部分符合 STL 的迭代器介面。

文件

發行說明

發行說明請見此處

已知限制

更多資訊

作者與致謝

uBLAS 最初由 Joerg Walter 和 Mathias Koch 撰寫。我們要感謝所有支持並貢獻於此函式庫開發的人:David Abrahams、Ed Brey、Fernando Cacciola、Juan Jose Gomez Cadenas、Beman Dawes、Matt Davies、Bob Fletcher、Kresimir Fresl、Joachim Kessel、Patrick Kowalzick、Toon Knapen、Hendrik Kueck、John Maddock、Jens Maurer、Alexei Novakov、Gary Powell、Joachim Pyras、Peter Schmitteckert、Jeremy Siek、Markus Steffl、Michael Stevens、Benedikt Weber、Martin Weiser、Gunter Winkler、Marc Zimmermann、Marco Guazzone、Nasos Iliopoulus、《a href="/">Boost 的成員以及世界各地所有其他的貢獻者。我保證我會盡力將他們的名字添加到此列表中。

此函式庫目前由 David Bellot 和 Stefan Seefeld 維護。

常見問題

問:我應該在新專案中使用 uBLAS 嗎?
答:在撰寫本文時 (2012 年 9 月),有許多優秀的矩陣函式庫可用,例如 MTL4armadilloeigen。uBLAS 提供了一組穩定、經過良好測試的向量和矩陣類別、典型的線性代數運算以及三角方程式系統的求解器。uBLAS 提供稠密、結構化和稀疏矩陣,所有這些都使用類似的介面。最後,uBLAS 提供了良好(但並非傑出)的效能。另一方面,uBLAS 的最後一次重大改進是在 2008 年,自 2009 年以來沒有任何重大變更。因此,應該問自己一些問題來輔助決策:可用性? uBLAS 是 boost 的一部分,因此在許多環境中都可用。易於使用? uBLAS 對於簡單的事情很容易使用,但當您偏離常軌時需要相當的 C++ 知識。效能? 有更快的替代方案。尖端技術? uBLAS 已有超過 10 年的歷史,錯過了 C++11 的所有新功能。

問:我正在執行 uBLAS 稠密向量和矩陣基準測試。為什麼原生 C 和函式庫實作之間的效能差異如此顯著?
答:uBLAS 區分除錯模式(啟用大小和類型一致性檢查,停用表達式樣板)和發佈模式(停用大小和類型一致性檢查,啟用表達式樣板)。請檢查是否定義了 cassert 的前置處理器符號 NDEBUGNDEBUG 啟用發佈模式,而發佈模式會使用表達式樣板。您可以選擇性地定義 BOOST_UBLAS_NDEBUG 來停用 uBLAS 的所有邊界、結構和類似檢查。

問:我寫了一些 uBLAS 測試,嘗試錯誤地指派不同的矩陣類型或超出向量和矩陣維度。為什麼我沒有收到編譯時或執行階段診斷?
答:uBLAS 區分除錯模式(啟用大小和類型一致性檢查,停用表達式樣板)和發佈模式(停用大小和類型一致性檢查,啟用表達式樣板)。請檢查是否定義了 cassert 的前置處理器符號 NDEBUGNDEBUG 會停用除錯模式,而除錯模式是進行大小和類型一致性檢查所必需的。

問:我寫了一些 uBLAS 基準測試來測量矩陣鏈乘法(例如 prod (A, prod (B, C)))的效能,發現由於使用表達式樣板而導致效能顯著下降。如何停用表達式樣板?
答:您不需要停用表達式模板。請嘗試使用 prod (A, matrix_type (prod (B, C)))prod (A, prod<matrix_type > (B, C)) 重新引入暫時物件。


版權所有 (©) 2000-2011 Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot
使用、修改和散佈須遵守 Boost 軟體授權條款 1.0 版。(請參閱隨附的 LICENSE_1_0.txt 檔案或瀏覽 https://boost.dev.org.tw/LICENSE_1_0.txt )