在CentOS上集成Fortran與Python主要有兩種方法:使用f2py
工具和使用ctypes
庫。以下是詳細的步驟和示例。
f2py
是NumPy團隊開發的一個工具,可以將Fortran程序轉換為Python模塊,從而在Python中調用Fortran程序。以下是具體步驟:
編寫Fortran代碼:
創建一個.f90
擴展名的Fortran源文件,例如hello.f90
:
subroutine hello(a)
implicit none
integer, intent(in) :: a
print *, 'Hello from Fortran90!!!', a
end subroutine hello
編譯Fortran代碼:
在終端中運行以下命令來編譯Fortran代碼:
f2py -m foo -c foo.f90
這將生成一個名為foo.cpython-<version>-linux-gnu.so
的文件。
在Python中調用Fortran函數:
在Python控制臺中運行以下代碼:
import foo
foo.hello(15)
輸出將是:
Hello from Fortran90!!! 15
ctypes
是Python內置的一個庫,可以用來調用外部C動態鏈接庫,因此也可以用于調用Fortran程序。以下是具體步驟:
編寫Fortran代碼:
創建一個Fortran源文件,例如circle.f90
:
subroutine area_of_circle(r, area)
use iso_c_binding
implicit none
real(c_double), intent(in) :: r
real(c_double), intent(out) :: area
area = 4 * atan(1.0) * r**2
end subroutine area_of_circle
編譯Fortran代碼為動態鏈接庫:
在終端中運行以下命令:
gfortran -shared -fPIC circle.f90 -o circle.so
在Python中調用Fortran函數:
編寫Python調用腳本test_mat.py
:
import numpy as np
from numpy.ctypeslib import load_library, ndpointer
from ctypes import c_int
# 加載動態鏈接庫
flib = load_library("circle", "./circle.so")
# 指定參數和返回數據類型
flib.area_of_circle.argtypes = [ndpointer(dtype=np.float64, ndim=1), c_int]
flib.area_of_circle.restype = c_double
# 創建一個二維數組
data = np.empty(shape=(4, 5), dtype=np.float64, order='F')
# 將數組首地址傳入Fortran中進行計算
flib.area_of_circle(data.ctypes.data, 4)
# 打印結果
print("Area of circle with radius 2.0 is", data[0, 0])
運行Python腳本:
在終端中運行以下命令:
python test_mat.py
輸出將是:
Area of circle with radius 2.0 is 31.41592653589793
通過以上步驟,你可以在CentOS上成功地將Fortran代碼集成到Python中。選擇哪種方法取決于你的具體需求和偏好。