回覆列表
  • 1 # 自可樂

    建議儘量使用 numpy 中的陣列整體或者切片操作,以避免迴圈,特別是多重迴圈,以顯著地提高科學計算的效率。

    舉幾個簡單的例子如下:

    假設 A 是一個長度為 n 的 numpy 陣列:

    1. 計算 A 中元素的和,使用 A.sum() 或者 np.sum(A),而不要使用迴圈求和。

    2. 判斷 A 中是否有大於 1 的元素,使用 (A > 1).any(),不要迴圈進行判斷。

    3. 將 A 中大於 1 的元素取出放入一個新的陣列,使用 A[A>1],不要迴圈判斷一個一個地取出元素。

    4. 取出 A 中指標為奇數的元素,使用 A[1::2],不要使用迴圈。

    5. 將 A 中所有元素增大一倍,使用 A *= 2,不要迴圈遍歷每個元素乘 2 再賦值。

    6. ......

    Python 中做科學計算最常用最基礎的工具就是 numpy 了,有必要好好掌握。下面是 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 做平行計算的專門介紹並提供了大量的程式例項。有需要或者感興趣的可以瞭解下。

  • 中秋節和大豐收的關聯?
  • 豬年春節即將來臨,你準備了什麼樣的新年賀詞?