2016-06-02 3 views
1

У меня есть код Fortran, который я бы хотел использовать с Python с f2py. Но я не могу передавать массивы Numpy известной формы через f2py. (Я на Python 2.7.10 и использую gfortran и mingw32 как компиляторы).Передача массивов из Python в Fortran с результатами F2PY error = 2 (связанная с формой)

Вот мой Fortran код:

Subroutine test(nx,ny,mask) 
    Integer, intent(inout) :: mask(ny,nx) 
    !f2py intent(in,out) mask 
End 

Что называется, как это в Python:

from test import test 
import numpy as np 

nx = 2 
ny = 2 

mask = np.ones((nx,ny),dtype=int) 

maskreturn = test(nx,ny,mask) 

Запуск результаты сценария в:

error: (shape(mask,1)==nx) failed for 1st keyword nx: test:nx=2 

Я не имею понятия, как чтобы он работал (мне нужна правильная передача сетки для более крупной модели). Есть ли какая-то ужасная ошибка Фортран Нуба?

+0

не знаю, если это имеет значение, но я рекомендую явно объявить nx, ny integer в подпрограмме. – agentp

ответ

1

Следующая, кажется, работает для меня

Fortran блок в untitled.f90:

subroutine test(nx,ny,mask) 
    integer, intent(in) :: nx, ny 
    integer, dimension(nx,ny), intent(inout) :: mask 
    !f2py intent(in,out) mask                                               
    print*,nx,ny,mask 
end subroutine test 

Compile с:

f2py -c --fcompiler=gnu95 untitled.f90 

В питона сделать:

from untitled import test 
import numpy as np 
nx = 2 ; ny = 2 
mask = np.ones((nx,ny),dtype=np.int32) 
temp = test(mask,ny,nx) #Note the reversed order 

Надеюсь, это поможет, но я не знаком с f2py, поэтому не могу объяснить, почему это работает.

Обновление После поиска потенциальных дубликатов я столкнулся с this answer, в котором объясняется, как/почему это работает.

+0

Это было! Благодаря! F2Py кажется более могущественным, чем я! –

 Смежные вопросы

  • Нет связанных вопросов^_^