使用 f2py 编译基本的 fortran 模块
compiling basic fortran module with f2py
我正在尝试使用 F2py,但在涉及“已弃用的 numpy”的编译时收到一些错误消息或警告。我不确定如何解决这个问题。我正在使用 python 2.7.17 和 fortran90。
我写编译
f2py -c f2py_F90.f90 -m fortran
注意,编译时:
f2py -c f2py_F90.f90 -m fortran \
也没有解决问题。
下面是基本的 fortran 和 python 代码,它们表明了我遇到的问题。这个例子是最小的、完整的和可验证的。我怎样才能解决这个问题并成功地让 python 执行我传递给它的 fortran 模块?
我收到的消息是
警告“使用已弃用的 NumPy API”
预期的输出应该是 = [2,1,3] 但我却收到了上述警告。
!fortran code
module fmodule
implicit none
contains
subroutine fast_reverse(a,n)
integer, intent(in) :: n
real, intent(inout) :: a(:)
a(1:n) = a(n:1:-1)
end subroutine fast_reverse
end module fmodule
#python code
import fortran
import numpy as np
a = np.array([1,2,3],np.float32)
fortran.fmodule.fast_reverse(a,2)
a #the output should give a = [2,1,3]
- 忽略
#warning "Using deprecated NumPy API, disable it with ...
,参见Cython Numpy warning about NPY_NO_DEPRECATED_API when using MemoryView and Cython docs;
- 将最后一行
a #the output should give a = [2,1,3]
更改为 print(a) #the output should give a = [2,1,3]
以将 a
打印为 stdout
。
例如:
$ python2.7 -m numpy.f2py -c f2py_F90.f90 -m fortran
running build
...
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h :it17 :with2 :" "#define
NPY_NO_DEPRECATED_APIwarning : NPY_1_7_API_VERSION" [-W#warnings]
"Using deprecated NumPy API, disable it with " "#define
NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
#warning "Using deprecated NumPy API, disable it with " \
...
$ cat test_f2py_F90.py
#python code
import fortran
import numpy as np
a = np.array([1,2,3],np.float32)
fortran.fmodule.fast_reverse(a,2)
print(a) #the output should give a = [2,1,3]
$ python2.7 test_f2py_F90.py
[2. 1. 3.]
我正在尝试使用 F2py,但在涉及“已弃用的 numpy”的编译时收到一些错误消息或警告。我不确定如何解决这个问题。我正在使用 python 2.7.17 和 fortran90。
我写编译
f2py -c f2py_F90.f90 -m fortran
注意,编译时:
f2py -c f2py_F90.f90 -m fortran \
也没有解决问题。
下面是基本的 fortran 和 python 代码,它们表明了我遇到的问题。这个例子是最小的、完整的和可验证的。我怎样才能解决这个问题并成功地让 python 执行我传递给它的 fortran 模块?
我收到的消息是
警告“使用已弃用的 NumPy API”
预期的输出应该是 = [2,1,3] 但我却收到了上述警告。
!fortran code
module fmodule
implicit none
contains
subroutine fast_reverse(a,n)
integer, intent(in) :: n
real, intent(inout) :: a(:)
a(1:n) = a(n:1:-1)
end subroutine fast_reverse
end module fmodule
#python code
import fortran
import numpy as np
a = np.array([1,2,3],np.float32)
fortran.fmodule.fast_reverse(a,2)
a #the output should give a = [2,1,3]
- 忽略
#warning "Using deprecated NumPy API, disable it with ...
,参见Cython Numpy warning about NPY_NO_DEPRECATED_API when using MemoryView and Cython docs; - 将最后一行
a #the output should give a = [2,1,3]
更改为print(a) #the output should give a = [2,1,3]
以将a
打印为stdout
。
例如:
$ python2.7 -m numpy.f2py -c f2py_F90.f90 -m fortran
running build
...
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h :it17 :with2 :" "#define
NPY_NO_DEPRECATED_APIwarning : NPY_1_7_API_VERSION" [-W#warnings]
"Using deprecated NumPy API, disable it with " "#define
NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
#warning "Using deprecated NumPy API, disable it with " \
...
$ cat test_f2py_F90.py
#python code
import fortran
import numpy as np
a = np.array([1,2,3],np.float32)
fortran.fmodule.fast_reverse(a,2)
print(a) #the output should give a = [2,1,3]
$ python2.7 test_f2py_F90.py
[2. 1. 3.]