Ecrire un module python dans fortran en utilisant f2py

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.

environnement

f2py (inclus avec scipy) gfortran4.7.2

scénario

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

compiler

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éé.

Courir

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.

Conclusion

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

Ecrire un module python dans fortran en utilisant f2py
Ecrire Python dans MySQL
Ecrire des filtres Pandec en Python
Écrire une distribution bêta en Python
Lire et écrire des balises NFC avec python en utilisant PaSoRi
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Lire la sortie Fortran avec python
Ecrire une dichotomie en Python
Programmation GUI en Python avec Appjar
Précautions lors de l'utilisation de Pit avec Python
Ecrire un schéma JSON avec Python DSL
Ecrire un serveur HTTP / 2 en Python
Ecrire une fonction AWS Lambda en Python
Utilisation de variables globales dans les fonctions python
Ecrire le code de test du sélénium en python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Ecrire un test unitaire de langage C en Python
Essayez d'utiliser LeapMotion avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Lors de l'utilisation d'expressions régulières en Python
Création d'interface graphique en python avec tkinter 2
Ecrire diverses formes d'arbres phylogénétiques en Python à l'aide de la boîte à outils ETE
Écrire de la documentation dans Sphinx avec Python Livereload
Fonctionnement de la souris à l'aide de l'API Windows en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Les modules et packages en Python sont des "espaces de noms"
Essayez d'utiliser l'API Wunderlist en Python
Création d'interface graphique en python à l'aide de tkinter partie 1
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Hachez lentement les mots de passe en utilisant bcrypt en Python
Essayez d'utiliser l'API Kraken avec Python
Utilisation de venv dans un environnement Windows + Docker [Python]
Ecrire le test dans la docstring python
Tweet à l'aide de l'API Twitter en Python
[Python] [Windows] Communication série en Python à l'aide de DLL
Ecrire une courte définition de propriété en Python
Connectez-vous à Slack à l'aide de requêtes en Python
Ecrire le fichier O_SYNC en C et Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Ecrire un programme de chiffrement Caesar en Python
Utilisation des constantes physiques dans Python scipy.constants ~ constant e ~
Scraping de sites Web à l'aide de JavaScript en Python
Développement de slack bot avec python en utilisant chat.postMessage
Lire et écrire des fichiers JSON avec Python
Ecrire une méthode de cupidité simple en Python
Ecrire un plugin Vim simple en Python 3
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Remarques sur l'utilisation de python (pydev) avec eclipse
Classification des maladies par Random Forest en utilisant Python
Téléchargez des fichiers dans n'importe quel format en utilisant Python
Exécution de tâches parallèles à l'aide de concurrent.futures en Python
Comment écrire Ruby to_s en Python