numpy est pratique pour gérer les données, mais Python a une boucle for lente, il n'y a donc aucun moyen de bien faire la différenciation. Si vous n'écrivez que la partie différentielle dans fortran avec f2py, vous pouvez accélérer. Les opérations de différenciation sont communes à de nombreuses analyses, donc une fois que vous les notez, vous pouvez les utiliser.
Veuillez vous référer au manuel officiel de f2py à ici.
Il semble qu'il soit basique d'écrire une fonction à l'aide d'un sous-programme. Les bases sont les suivantes
--La valeur de retour est gérée par ʻintent (out)
Par exemple, une «fonction qui ajoute 1 à un tableau et renvoie» peut être écrite comme suit. Le nom du fichier doit être f2py_test.f90
etc.
subroutine add(qq,ix,qq_add)
implicit none
integer :: i
integer, intent(in) :: ix
real(8), dimension(ix), intent(in) :: qq
real(8), dimension(ix), intent(out) :: qq_add
do i = 1,ix
qq_add(i) = qq(i) + 1
enddo
return
end subroutine add
f2py --fcompiler=gfortran -m f2py_test -c --f90flags='-O3' f2py_test.f90
Et. Assurez-vous d'ajouter l'option -c
et d'écrire le nom du fichier à compiler à la fin. Chaque option est ci-dessous
---- compiler =
: spécification du compilateur fortran
---m
: nom du module lorsqu'il est utilisé en Python (il ne doit pas nécessairement être le même que le nom du fichier)
---- f90flags =
: Options utilisées par le compilateur fortran
Lorsque vous utilisez f2py depuis Python, procédez comme suit.
import f2py_test #Importer des modules compilés avec f2py
import numpy as np
ix = 5
qq = np.zeros(ix) #Définissez correctement le tableau numpy
qq_add = f2py_test.add(qq,ix) #Appelez la fonction définie dans f2py
Puisque qq_add
défini dans le code fortran est défini comme ʻintent (out), il est jugé comme une valeur de retour et n'est pas inclus dans l'argument de la fonction. D'autre part, dans le code ci-dessus, la taille du tableau ʻix
est également incluse comme argument de la fonction, mais dans f2py, la taille du tableau est automatiquement déterminée et utilisée comme variable optionnelle, puis automatiquement `len (qq). Il remplace ». Donc,
qq_add = f2py_test.add(qq)
Le résultat est le même.
Lors de l'analyse d'une séquence de numpy, je voudrais abaisser la barrière de l'esprit en utilisant f2py et accélérer l'analyse.
Recommended Posts