You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:09:10