我有一个python主程序,从fortran程序调用子程序, 当我在没有“module,implicit none”语句的情况下编写时,子例程运行良好,但无法使用它
以下是代码的可复制示例:
#data.csv是我读取数据的地方
a,b,c
1,5,0.3
2,8,0.6
3,9,0.7
4,16,0.2
5,23,0.4
#来自python
import pandas as pd
import pymod
from numpy import *
data = pd.read_csv('data.csv')
column = data.columns
x_data = data[column[0]].values
y_data = data[column[1]].values
data_len = len(data)
a, b, sa, sb, r_squared, sigma = pymod.simple_lin_fit(x_data, y_data, data_len)
print(a, b, sa ,sb, r_squared)
#pymod.f90
subroutine simple_lin_fit(x_data, y_data, N, a, b, sa, sb, r_squared, sigma)
implicit none
real(kind = 8), dimension(N) , intent(in) :: x_data, y_data
real(kind = 8), intent(out) :: a, b, sa, sb, r_squared, sigma
real(kind = 8) :: sum_x, sum_xx, sum_xy, sum_y, sum_yy, SSE, SXX, SXY, SYY
integer, intent(in) :: N
sum_x = sum(x_data)
sum_y = sum(y_data)
sum_xx = sum(x_data**2)
sum_yy = sum(y_data**2)
sum_xy = sum(x_data*y_data)
SXY = sum_xy - sum_x*sum_y/N
SXX = sum_xx - sum_x**2/N
SYY = sum_yy - sum_y**2/N
a = SXY/SXX
b = (sum_y - a*sum_x)/N
SSE = sum((y_data-a*x_data-b)**2)
sigma = sqrt(SSE/(N-2))
r_squared = 1 - SSE/SYY
sa = sigma/sqrt(SXX)
sb = sa*sqrt(sum_xx/N)
end subroutine simple_lin_fit
当我编译它时,它工作得很好,但是当我放置场景时,它就不工作了
module pymod
implicit none
contains
<subroutine>
end module
在它里面,我需要把它写成一个fortran模块,因为我需要在fortran模块中添加一些其他模块
我的错误是
Traceback (most recent call last):
File "lin_fit.py", line 27, in <module>
a, b, sa, sb, r_squared, sigma = pymod.simple_lin_fit(x_data, y_data, N)
AttributeError: module 'pymod' has no attribute 'simple_lin_fit'
我正在用
f2py3 -m pymod -c pymod.f90 mv .so pymod.so
python3 pythonprogram.py
目前没有回答
相关问题 更多 >
编程相关推荐