在Python中使用f2py编写Fortran元素函数

2024-05-16 13:00:49 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我想用f2py转换的最小Fortran示例:

Fortran模块utils_test.f90

module utils_test

contains
    elemental real(8) function prod(a, b)
        real(8), intent(in) :: a, b
        prod = a*b
    end function
end module utils_test

使用f2py:

python3 -m numpy.f2py -c utils_test.f9 -m utils_test

在python中,我可以如下使用它:

import numpy as np
from utils_test import utils_test

x1 = 5.0
y1 = 3.0

print("Scalar product", utils_test.prod(x1, y1)) # The result is 15.0

x = np.linspace(1, 5, 5) # Numpy array
y = np.linspace(10, 15, 5) # Numpy array

print("Array element-wise product:", utils_test.prod(x, y)) # this outputs 10.0 not an array

输出为:

Scalar product 15.0
Array element-wise product: 10.0

在第二个示例中,它只输出xy的第一个元素的乘积。你知道吗

我可以通过向量化函数utils_test.prod来解决这个问题:

prod = np.vectorize(utils_test.prod)

有没有可能在python中获得预期的结果,而不必手动对函数进行矢量化?换句话说,如果原来的Fortran函数是elemental,那么f2py是否可以自动向量化函数?你知道吗

感谢您的帮助。你知道吗


Tags: 函数test示例npfunctionutilsprodproduct