python中使用f2py的Fortran基本函数
下面是我想使用python中使用f2py的Fortran基本函数,python,numpy,fortran,f2py,Python,Numpy,Fortran,F2py,下面是我想使用f2py转换的最小Fortran示例: Fortran模块utils\u 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
f2py
转换的最小Fortran示例:
Fortran模块utils\u 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\u test.f9-m utils\u test
在python中,我可以如下使用它:
将numpy导入为np
从utils\u测试导入utils\u测试
x1=5.0
y1=3.0
打印(“标量积”,utils_test.prod(x1,y1))#结果为15.0
x=np.linspace(1,5,5)#Numpy数组
y=np.linspace(10,15,5)#Numpy数组
打印(“数组元素相关产品:”,utils_test.prod(x,y))#此输出10.0而不是数组
输出为:
Scalar product 15.0
Array element-wise product: 10.0
在第二个示例中,它仅输出x
和y
的第一个元素的乘积
我可以通过将函数utils\u test.prod
矢量化来解决这个问题:
prod=np.vectorize(utils\u test.prod)
在python中,不需要手动对函数进行矢量化,就可以获得预期的结果吗?换句话说,如果原始Fortran函数是基本的
,f2py是否可以自动矢量化函数
非常感谢您的帮助。不将函数声明为元素不是更好吗?@norok2:这只是一个很小的示例,Fortran中的函数也将用于其他Fortan程序中,因为预期它是元素。但是,我很想知道是否有一种解决方案,使用f2py自动矢量化函数,即使它没有声明为
elemental
?从这个问题来看,不清楚您是否只是想让您的函数被自动修饰为np.vectorize()
(因此带有与之相关的性能损失)或其他东西。@norok2:作为一个附带问题:numpy如何转换其函数(例如从Lapack转换为向量化函数?).我不知道f2py是否支持Fortran中的本机elmental函数。如果没有,我正在寻找不同的选项,以矢量化在这种情况下的功能