使用F2PY3将Python参数转为Fortran数组遇问题求助
解决F2PY调用Fortran高斯消元子程序的报错问题
问题根源
报错主要由以下几个问题导致:
- 参数数量缺失:Fortran子程序要求传入4个参数(
A,c,x,n),但你调用时仅传入3个,漏掉了输出参数x。 - 数组布局不匹配:Fortran采用列优先内存布局,而numpy默认是行优先;虽numpy默认
float64对应Fortran的REAL*8,但显式指定类型和布局更可靠。 - 输入输出参数的可写性:
A和c在Fortran中是INTENT(inout)类型,需要确保传入的numpy数组具备可修改属性。
修正后的调用代码
import numpy as np import fortran_operations as ops sys = [[3, -0.1, -0.2], [0.1, 7, -0.3], [0.3, -0.2, 10]] known = [7.85, -19.3, 71.4] # 创建匹配Fortran要求的双精度、列优先数组 A = np.array(sys, dtype=np.float64, order='F') c = np.array(known, dtype=np.float64, order='F') n = 3 # 提前初始化输出数组x x = np.zeros(n, dtype=np.float64, order='F') # 传入全部4个参数 ops.solve_lin_sys(A, c, x, n) print("方程组的解:", x)
额外注意事项
- 若需保留原始输入数组,传入前要创建副本,因为
INTENT(inout)的A和c会被Fortran子程序直接修改:A_input = A.copy() c_input = c.copy() ops.solve_lin_sys(A_input, c_input, x, n) - 编译Fortran代码时,推荐指定编译器确保兼容性,示例命令:
f2py -c -m fortran_operations solve_lin_sys.f90 --fcompiler=gfortran
内容的提问来源于stack exchange,提问作者Marco Leonardi
相关产品推荐
相关产品推荐

