使用f2py编译Fortran模块出现NumPy API弃用警告如何解决
修复方案
1. 解决无预期输出问题
核心原因是f2py对Fortran假设形状数组a(:)的参数顺序做了自动调整,你传入的长度参数n=2没有实际生效,同时数组内存布局不匹配也可能导致修改不生效,按以下步骤修改即可:
修改Fortran代码为显式形状数组
将子例程中数组声明修改为显式关联长度参数n,让f2py可以正确识别参数对应关系:
!fortran code module fmodule implicit none contains subroutine fast_reverse(a,n) integer, intent(in) :: n real, intent(inout) :: a(n) ! 这里修改为显式指定数组长度为n a(1:n) = a(n:1:-1) end subroutine fast_reverse end module fmodule
调整Python调用参数
指定numpy数组为Fortran连续内存布局,保证Fortran侧的修改可以正常回写到Python变量:
import fortran import numpy as np # 加order='F'指定Fortran顺序,匹配Fortran的内存布局 a = np.array([1,2,3],np.float32, order='F') fortran.fmodule.fast_reverse(a, 2) print(a) # 此时输出为[2. 1. 3.]
2. 解决deprecated numpy警告问题
该警告是旧版本f2py默认调用Numpy废弃API导致的,编译时添加Numpy官方提供的屏蔽宏即可,修改编译命令为:
f2py -c f2py_F90.f90 -m fortran -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
如果需要换行书写编译命令,补充完整后续参数即可:
f2py -c f2py_F90.f90 -m fortran \ -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
内容的提问来源于stack exchange,提问作者Jeff Faraci
相关产品推荐
相关产品推荐

