LINUX.ORG.RU

какие то странности с водом массива в f2py


0

1

некоторая субрутина на фортране принимает в качестве аргумента массив, столкнулся с проблемой.

фортрановый модуль:

subroutine fmodule(n,A,B)
	 integer :: n
	real(8), dimension(n) :: A,B
	  !! f2py declarations
	!f2py integer intent(in) :: n
	!f2py real(8) intent(in) :: A
	!f2py real(8) intent(out) :: B
	!!setup
	print *, 'A=',A
	do i=1,n
		B(i)=A(i)+i
		end do
	print *,'B=',B
	end subroutine fmodule
сборка:
import os
os.system('rm -vf fortran_module.pyf')
os.system('f2py -m fortran_module -h fortran_module.pyf fortran_module.f90')
os.system('rm -vf fortran_module.so')
os.system('f2py -c --fcompiler=gnu95 fortran_module.pyf fortran_module.f90')
питон:
import numpy 
import pylab 
from numpy import *
import fortran_module
N=10
A=arange(0,N)
а дальше, вот так не работает
print(fortran_module.fmodule(N,A))
а вот так работает
print(fortran_module.fmodule(A,N))
почему аргументы поменялись местами??

★★★★★

незная Python, осмелюсь заметить, что фортрановские массивы относительно индексов устроенны от колонок к строкам, (в привычном С как правило наоборот), да и хранятся они подругому.. так что всё правильно; в Python очевидно то-же

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

ну массив то одномерный. а мутаются местами не инлдексы массива, а сами переменные. должна N быть раньше A

thunar ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.