'揭祕為什麼應使用 Python 開展科學研究'

"
"
揭祕為什麼應使用 Python 開展科學研究

您可能很難相信,Python 編程語言竟然不是一種新語言,實際上,它比 Java™ 語言甚至 HTTP 還要成熟。但不幸的是,人們長期以來一直對 Python 存在某些誤解,比如認為 Python 速度緩慢。

這種誤解的根源在於,使用解釋器和標準 Python(使用名為 CPython 的內置編譯器)的交互式 Python 版本確實很慢。但是,儘管 Python 解釋器和 Python 語言可能比 Fortran 或 C 語言要慢,但 Python 運行時代碼不一定會慢。科學計算包(如 SciPy 和 NumPy)並不帶有標準 Python 的很多缺點。

此外,除標準 Python 外,還有其他主要的 Python 實現。這些被稱為分發版實現實際上可能比標準 Python 分發版使用更廣泛。另外,您還可以編譯 Python 來加速運行時。諸如即時 (JIT) 編譯器 PyPy 之類的一些編譯器實現可以生成運行時代碼,其運行速度與 C 語言一樣快,甚至比 C 語言還要快。

在本文中,讓我們來看看採用 Python 進行科學研究的一些令人信服的理由。在研究 Python 的優點之前,我們先來看看研究人員目前喜歡用於科學研究的工具。在後續文章“通過為 Python 提速來助力科學研究”中,我們將介紹 Python 性能優化和加速。

科學計算方法

大多數科學家都使用 MATLAB 或 GNU Octave 等工具進行建模和科學計算。對於更大的問題和更嚴格的工作,研究人員仍然使用 Fortran,其次則使用 C/C++。

這主要是因為建模工具內置有 Fortran 友好擴展功能,可以無縫擴展到本機 Fortran。也可能會使用 C/C++,但對於數字計算而言,Fortran 的速度通常比 C/C++ 更快。Fortran 的另一個優勢在於,它可以使用 OpenMP 和 Open MPI 輕鬆轉換程序,從而用於超級計算機集群。

為了解決那些無需高端超級計算機性能的問題,工作站是一個很好的選擇。工作站利用高端 GPU 卡或 CPU 協處理器並行運行任務。

在這些平臺上優化 Fortran,通常需要使用特定於供應商和特定於平臺的特殊編譯器。例如,要採用開放計算語言 (OpenCL) 在 Intel CPU 集群或 GP-GPU 上以最佳方式運行程序,就需要使用 Intel® Fortran 編譯器。同樣,您需要使用 PGI CUDA Fortran 才能利用 NVIDIA® GPU。

為何要使用 Python 進行科學計算?

既然選擇如此之多,“為什麼還要使用 Python 進行科學計算呢?”事實證明,這裡有很多令人信服的理由。我們先來看看 Python 在科學計算環境中的一些優勢,這些優勢為使用 Python 的根本原因打下基礎。

使用 Python 進行科學計算的 6 大理由?

  • Python 內置了對科學計算的支持。大多數 Python 分發版都包含 SciPy 生態系統(開源),其中包括 SciPy(一個 SciPy 庫)、一個名為 NumPy 的數字計算包,以及多個獨立的工具包(每個工具包都稱為 Scikits)。Matplotlib 是一個用於實現可視化的 2D 繪圖庫,也是 SciPy 生態系統的一部分。Matplotlib 在功能和使用方面與 MATLAB 非常相似,但它是開源的。
  • Python 可橋接到 MATLAB 或 Octave。 Python 可以安裝 MATLAB 引擎 API,以便 Python 程序可以調用 MATLAB 作為計算引擎。MATLAB 程序也可以調用 Python 函數,但有一些限制。Python 的某些分發版可能使用 Python 包,例如 Pymatbridge,它可以同時支持 MATLAB 和 Octave,並允許在 Jupyter Notebook 中使用 MATLAB。
  • Python 是一種高度可擴展的語言。開發人員多年來一直在對 C/C++ 程序使用 Python 包裝器。Python 使用 C Foreign Function Interface for Python (cFFI) 與 C 代碼直接交互。諸如 SWIG 之類的工具很容易便可實現這一點。開發人員還可以使用 Fortran 到 Python 接口生成器包 F2Py(現在是 NumPy 的一部分),通過 Python 調用 Fortran 子例程。
  • Python 具有非常不錯的輸入/輸出 (I/O) 選項。直到最近,Fortran I/O 傳統上都是基於記錄的。相比之下,Python 長期支持多個 I/O 選項和許多其他包,以支持所有類型的 I/O 格式,包括實時和流格式。
  • Python 為任務自動化提供強大支持。Python 的內置腳本功能和多個包為任務自動化提供了強大的支持。輕而易舉地便可自動完成重複性任務和執行數據記錄。
  • Python 可以使用 Web 前端。 Python 包(如 Django 和 Flask)使開發 Python 並將其作為 API 與 Web 前端一起使用成為可能。當使用基於雲的基礎架構作為平臺來訪問高性能計算 (HPC) 後端時,此功能特別有用。

讓我們回到問題的核心,關注一下這些基本優勢如何成為更加切合實際的理由,促使人們採用 Python 進行科學計算。在科學計算中使用 Python 的最大動力就在於問題解決方法的不斷演變。

新的科學問題解決範式

多年來,科學問題解決工具包一直都在不斷髮展演變。早期的方法依賴數學建模和模擬來了解我們周圍的宇宙。隨著我們對宇宙的瞭解不斷深入,知識體系也日臻完善,模型變得極其複雜,非常難以模擬。科學家們已經開發出一些新方法來解決大規模的科學問題。讓我們來看看其中幾種方法。

  • 數據驅動的科學研究方法:為了更好地處理氾濫的數據,科學家們開始採用數據驅動的科學研究方法。在處理許多科學問題時,他們都使用統計或貝葉斯分析工具來解決特定種類的問題。雖然傳統用途基於 R 編程,但 Python 已然成為數據科學家實際採用的編程語言。
  • 基於發現的科學研究方法:諸如機器學習和深度學習之類可查找模式並發現關聯的認知方法,為科學家們提供了另一種基於發現的科學研究方法。“發現”是生命科學研究中非常受歡迎的一種方法。機器學習和深度學習框架大多都基於 Python。
  • 量子計算科學研究方法:量子計算的出現,為以前即使是超級計算機也無力解決的問題開闢了全新的問題解決方法。大多數量子計算機實現都使用匯編語言形式進行編程。Python 為這些實現提供了一個理想的高級包裝器和 API,支持科學研究應用程序和量子計算系統後端之間進行通信。

轉自:https://developer.ibm.com/cn/blog/2018/use-python-for-scientific-research/

"

相關推薦

推薦中...