回覆列表
  • 1 # 自可樂

    一些歷史悠久且至今還在廣泛使用的科學計算開源庫有:

    BLAS (Basic Linear Algebra Subprograms),包含很多常用的線性代數運運算元程式,如向量點積,矩陣和向量乘積,矩陣和矩陣乘積等。LAPACK (Linear Algebra PACKage),包含一系列的程式,可以求解如線性方程組,最小二乘問題,本徵值問題,奇異值問題等,透過呼叫 BLAS 完成大部分工作以獲得高的運算效能。BLACS (Basic Linear Algebra Communication Subprograms),是一個專門為線性代數運算而設計的訊息傳遞庫。PBLAS (Parallel BLAS),為 ScaLAPACK 而設計的一個分散式記憶體 BLAS 庫。ScaLAPACK(Scalable LAPACK 簡稱)是一個平行計算軟體包,適用於分散式儲存的 MIMD (multiple instruction, multiple data)平行計算機。它是採用訊息傳遞機制實現處理器/程序間通訊,因此使用起來和編寫傳統的 MPI 程式比較類似。ScaLAPACK 主要針對密集和帶狀線性代數系統,提供若干線性代數求解功能,如各種矩陣運算,矩陣分解,線性方程組求解,最小二乘問題,本徵值問題,奇異值問題等,具有高效、可移植、可伸縮、高可靠性等優點,利用它的求解庫可以開發出基於線性代數運算的並行應用程式。......

    這些科學計算庫都是高度最佳化並經過長期檢驗的,但是直接使用這些庫可能並不方便,因為他們使用比較老的 Fortran (Fortran 77)和 C 語言編寫的,且其中的一些子程式往往具有很長的引數介面,導致其呼叫、編譯和連結等都比較困難。現在一般更常用的方案是使用一些建立在這些開源庫基礎之上的,對使用者更加友好的科學計算工具,如 numpy.linalg 或 scipy.linalg(它們都在底層呼叫 BLAS 和 LAPACK)中的相關函式。

    目前 Python 在科學計算方面的應用越來越廣泛,已經形成了一個比較完整的科學計算生態系統,其中就包括一大批開源的科學計算工具。下面是 Python 做科學計算經常會用到的一些模組和軟體包:

    numpy: Python 中最常用的數值計算庫,提供了一個通用且功能強大的高維陣列結構及大量的科學計算函式(其中相當一部分和 scipy 有交叉),是 Python 中幾乎所有其他科學計算庫的基礎。

    scipy: 在 numpy 的基礎上提供了科學計算中各種常見問題的解決工具,包括數學物理中的各種特殊函式,數值積分,最佳化,插值,傅立葉變換,線性代數,訊號處理,影象處理,隨機數和機率分佈,統計學等等。sympy: Python 中的符號計算庫,支援符號計算、高精度計算、模式匹配、繪圖、解方程、微積分、組合數學、離散數學、幾何學、機率與統計、物理學等方面的功能,能在很大程度上代替 Mathematica 和 Matlab 的符號計算功能。Ipython: 一個 Python 的互動式開發和計算環境,比 Python 自帶的 shell 好用且功能強大得多,支援變數自動補全,自動縮排,支援 bash shell 命令,內建了許多很有用的功能和函式。 IPython notebook 可以將程式碼、影象、註釋、公式和作圖集於一體,已經成為用 Python 做教學、計算、科研的一個重要工具。matplotlb: Python 做科學計算最常用和最重要的畫圖和資料視覺化工具包。h5py: 用 Python 操作 HDF5 格式資料的工具。HDF5 是一個應用廣泛的科學資料儲存格式,擁有一系列的優異特性,如支援非常多的資料型別,靈活,通用,跨平臺,可擴充套件,高效的 I/O 效能,支援幾乎無限量(高達 EB)的單檔案儲存等。pandas: Python 中常用的資料分析包,適合時間序列及金融資料分析。emcee: Python 實現的馬爾可夫鏈蒙特卡洛(MCMC)庫。pymc: 另一個實現貝葉斯統計模型和馬爾科夫鏈蒙塔卡洛取樣的工具。

    近些年 Python 在高效能計算領域的應用也越來越廣泛,用 Python 做平行計算也是一個不錯的選擇,既簡單易用,又能在很多時候媲美 C、C++ 和 Fortran 的執行效能。用 Python 做平行計算的途徑有很多,比如說使用標準庫中的 [threading 模組](https://docs.python.org/2/library/threading.html)進行執行緒級別的並行,[multiprocessing 模組](https://docs.python.org/2/library/multiprocessing.html)進行程序級別的並行,[concurrent.futures 模組](https://docs.python.org/3/library/concurrent.futures.html)實現非同步並行,使用 [IPython.parallel 模組](https://ipython.org/ipython-doc/3/parallel/index.html)進行多種方式的並行,使用 [mpi4py 包](https://pypi.org/project/mpi4py/)進行 MPI 訊息傳遞平行計算,等等。如果可以使用 C/C++,Fortran 或者使用 cython 為 Python 編寫擴充套件模組,還可以使用 OpenMP 並行。對 GPU 程式設計則可以使用 [pyCUDA](https://documen.tician.de/pycuda/)。我的個人[簡書專題](https://www.jianshu.com/c/5019bb7bada6)和 [CSDN 部落格專欄](https://blog.csdn.net/column/details/26248.html)中有對用 Python 做平行計算的專門介紹並提供了大量的程式例項。有需要或者感興趣的可以瞭解下。

  • 中秋節和大豐收的關聯?
  • 女生怎麼穿搭才能夠仙氣十足?