2012-06-06 10 views
5

¿Las versiones recientes de f2py admiten el ajuste de funciones fortran con valores de matriz? En alguna documentación antigua esto no era compatible. ¿Qué tal ahora?f2py funciones con valores de matriz

Vamos a por ejemplo guardar la siguiente función como func.f95.

function func(x) 
    implicit none 
    double precision :: x(:),func(size(x)) 
    integer :: i 
    do i=1,size(x) 
     func(i) = i*x(i) 
    end do 
end function 

Compilo esto con f2py --fcompiler=gnu95 -c -m func func.f95

luego dejar que el siguiente código Python sea test_func.py

import func 
from numpy import array 

x = array(xrange(1,10),dtype='float64') 
print 'x=',x 

y = func.func(x) 
print 'func(x)=',y 

La salida de
python test_func.py está

x= [ 1. 2. 3. 4. 5. 6. 7. 8. 9.] 
Segmentation fault 
+0

puede hacer [la solución explicada en esta respuesta ...] (http://stackoverflow.com/q/17474225/832621), pero requerirá más evaluaciones de las requeridas. Para este caso, iría por 'Cython' –

Respuesta

2

El me chanism de f2py convierte Fortran subrutinas en funciones de python. No entiende cómo convertir una función Fortran en una función python. He descubierto que necesito ajustar todas las funciones de Fortran con una subrutina, o mejor aún, reescribirlas como subrutinas.

+0

¿Es f2py ** tan ** poderoso? ¿Es lo suficientemente confiable que escribir todo el código base de esta manera especial es un precio justo? – Tentresh

+0

Nunca he tenido problemas con la fiabilidad, pero como he dicho, es frustrante. Personalmente, solo lo uso para proyectos pequeños debido a las restricciones que impone. Hay otra herramienta, [fwrap] (http://fwrap.sourceforge.net/), que se supone que es mejor que f2py, pero no la he probado. – SethMMorton

Cuestiones relacionadas