我在我的python代码中使用了fortran子例程,该子例程运行了,但似乎没有向python返回任何内容。
这是我的子程序
subroutine gameo(N, matrix, newmat)
integer :: N
integer :: matrix(10,10), maxit, newmat(10,10), naap
do i=1,N
do j=1,N
naap = 0 !count neighbours
do k=i-1,i+1
do l=j-1,j+1
if (k==i .AND. l==j) then
continue
else if (k>=N .OR. k<0) then
continue
else if (l>=N .OR. l<0) then
continue
else if (matrix(k,l) == 1) then
naap = naap+1
end if
end do
end do
if (matrix(i,j) ==1) then !update new array
if (naap>3) then
newmat(i,j) = 0
else if (naap < 2) then
newmat(i,j) = 0
else
newmat(i,j)= 1
end if
else if (matrix(i,j) == 0) then
if (naap==3) then
newmat(i,j) = 1
else
newmat(i,j) = 0
end if
end if
end do
end do
end subroutine gameo
这是我的python代码
N = 10
matrix = np.zeros((N,N))
for i in range(N):
for j in range(N):
matrix[i,j]=np.random.randint(0,2)
it = 0
maxit = 10
while it<maxit:
newmat = np.zeros((N,N))
newmat = gameo.gameo(N,matrix,newmat) #calling Fortran subroutine
matrix = newmat
it += 1
我在fortran数组上也遇到问题,我不能写'matrix(N,N)',但必须将其分配为'matrix(10,10)'。 我对python和fortran比较陌生,我已经工作了仅仅几个月。