python Facile à écrire, mais rapide ~ → Le goulot d'étranglement est modulaire fortran !! !! !! vite! !! !!
Modulisons le programme d'affichage des nombres premiers que j'ai écrit plus tôt, qui sert également de pratique pour Fortran.
f2py (inclus avec scipy) gfortran4.7.2
Préparez un fichier décrivant le sous-programme que vous souhaitez modulariser. L'argument du sous-programme déclare dans avec Cf2py. La valeur de retour du sous-programme (c'est-à-dire la valeur de retour reçue du côté python) se déclare avec Cf2py. Si vous n'écrivez pas la déclaration Cf2py depuis le début de la ligne et ouvrez 6 espaces dans le corps du script, une erreur de compilation se produira. Apparemment, je dois l'écrire en retrait après Cf2py (c'est ennuyeux !!)
primepy.f90
subroutine prime_number(max_num, ret)
implicit none
integer max_num
integer ret(max_num)
integer i, j, list(max_num)
Cf2py intent(in) max_num
Cf2py intent(out) ret
!ensemble l
do i=1, max_num, 1
list(i) = i
enddo
list(1) = 0
!Définir un nombre premier
do i=1, max_num, 1
if (.not. list(i) == 0) then
do j = i*2, max_num, i
list(j) = 0
end do
endif
enddo
!Renvoie une liste de nombres premiers
do i=1, max_num, 1
ret(i) = list(i)
enddo
end subroutine prime_number
f2py -c --fcompiler=gfortran -m prime primepy.f90
Compiler avec -c
Spécifiez le compilateur avec --fcompiler
Fichier de sortie après -m
Enfin, le fichier programme Fortran
Vérifiez ensuite l'aide avec -h
Succès si le fichier prime.so est créé.
Avec un interpréteur python
>>> import prime
>>> a = prime.prime_number(100)
>>> a
array([ 0, 2, 3, 0, 5, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17,
0, 19, 0, 0, 0, 23, 0, 0, 0, 0, 0, 29, 0, 31, 0, 0, 0,
0, 0, 37, 0, 0, 0, 41, 0, 43, 0, 0, 0, 47, 0, 0, 0, 0,
0, 53, 0, 0, 0, 0, 0, 59, 0, 61, 0, 0, 0, 0, 0, 67, 0,
0, 0, 71, 0, 73, 0, 0, 0, 0, 0, 79, 0, 0, 0, 83, 0, 0,
0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0], dtype=int32)
L'eau
Je ne pouvais pas penser à un moyen facile de ne renvoyer que des valeurs non nulles, c'est donc ʻa.take (a.nonzero () [0]) `du côté python.
Heureux d'éliminer le goulot d'étranglement Si vous ne comprenez pas avec fortran, gérez-le du côté python! !! La meilleure liste de python! !! !!
Recommended Posts