Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中使用f2py的Fortran基本函数_Python_Numpy_Fortran_F2py - Fatal编程技术网

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函数。如果没有,我正在寻找不同的选项,以矢量化在这种情况下的功能