Я использую F2PY в первый раз. У меня есть процедура FORTRAN, похожая на:
SUBROUTINE init(ranMatr,low,upp,nbvar,size)
IMPLICIT NONE
INCLUDE 'parameter.h'
DOUBLE PRECISION ranMatr(dimpop,dim), low(dim), upp(dim),sigma
INTEGER k, j, nbvar,size
CF2PY intent(in) low, upp, nbvar, size
CF2PY intent(in,out) ranMatr
DO k = 1, size
DO j = 1, nbvar
CALL uniforme(1,sigma)
ranMatr(k,j) = low(j) + sigma * (upp(j) - low(j))
ENDDO
ENDDO
RETURN
END
Он в основном инициализирует случайную матрицу под названием «ranMatr» со значениями в диапазоне, определяемом low и upp. Uniforme — это подпрограмма, возвращающая значение из равномерного распределения.
Теперь я установил numpy и f2py и попытался протестировать его с помощью этого кода.
Я создаю входные данные Python следующим образом:
ranMatr = [[0 for col in range(0, 5)] for row in range(0,10)]
low = numpy.array([1,2,3,4,5])
upp = numpy.array([6,7,8,9,10])
а затем попытался запустить процедуру:
init(ranMatr, low, upp, 5, 20)
Но я всегда получаю это сообщение об ошибке:
0-th dimension must be fixed to 100 but got 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
mga.error: failed in converting 2nd argument `low' of mga.init to C/Fortran array
Я предполагаю, что проблема связана с размерами, но я понимаю, что dim
должно быть верхней границей для «низких» векторных размеров.
Что я делаю неправильно?
dim==100
?, не вижу определения в выложенном коде. - person Peter   schedule 10.07.2014