[PYTHON] Behandle numpy Arrays mit f2py

Analysieren Sie Numpy-Daten mit f2py

numpy ist praktisch für den Umgang mit Daten, aber Python hat eine langsame for-Schleife, sodass es keine Möglichkeit gibt, eine gute Differenzierung vorzunehmen. Wenn Sie mit f2py nur den Differentialteil in fortran schreiben, können Sie beschleunigen. Differenzierungsvorgänge sind vielen Analysen gemeinsam. Sobald Sie sie aufgeschrieben haben, können Sie sie verwenden.

Weitere Informationen finden Sie im offiziellen f2py-Handbuch unter hier.

fortran code

Es scheint grundlegend zu sein, eine Funktion mit einer Unterroutine zu schreiben. Die Grundlagen sind wie folgt

Beispielsweise kann eine "Funktion, die einem Array 1 hinzufügt und zurückgibt", wie folgt geschrieben werden. Der Dateiname sollte "f2py_test.f90" usw. sein.

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

kompilieren

f2py --fcompiler=gfortran -m f2py_test -c --f90flags='-O3' f2py_test.f90

Und. Stellen Sie sicher, dass Sie die Option "-c" hinzufügen und den Namen der zu kompilierenden Datei am Ende schreiben. Jede Option ist unten

---- compiler = : fortran-Compilerspezifikation ---m: Modulname bei Verwendung in Python (er muss nicht mit dem Dateinamen identisch sein) ---- f90flags = : Vom fortran-Compiler verwendete Optionen

Verwenden von Fortran-Code aus Python

Gehen Sie wie folgt vor, wenn Sie f2py aus Python verwenden.

import f2py_test #Importieren Sie mit f2py kompilierte Module
import numpy as np
ix = 5
qq = np.zeros(ix) #Definieren Sie das Numpy-Array entsprechend
qq_add = f2py_test.add(qq,ix) #Rufen Sie die in f2py definierte Funktion auf

Da im fortran-Code definiertes "qq_add" als "intent (out)" festgelegt ist, wird es als Rückgabewert beurteilt und ist nicht im Argument der Funktion enthalten. Andererseits ist im obigen Code auch die Größe des Arrays "ix" als Argument der Funktion enthalten, aber in f2py wird die Größe des Arrays automatisch bestimmt und als optionale Variable verwendet, und dann automatisch "len (qq)". Es ersetzt `. Deshalb,

qq_add = f2py_test.add(qq)

Das Ergebnis ist das gleiche.

Was ich nicht anfasse, sondern anfassen möchte

Am Ende

Bei der Analyse einer Folge von Numpys möchte ich die Barriere des Geistes mit f2py senken und die Analyse beschleunigen.

Recommended Posts

Behandle numpy Arrays mit f2py
Behandle numpy mit Cython (Methode von memoryview)
[Rust / Python] Behandle Numpy mit PyO3 (Version August 2020)
Gleitender Durchschnitt mit Numpy
Behandle Excel mit Python
Behandle Rabbimq mit Python
Erste Schritte mit Numpy
Lernen Sie mit Chemo Informatics NumPy
Verkettung von Matrizen mit Numpy
Summencode mit Numpy
Führen Sie eine Regressionsanalyse mit NumPy durch
Erweitern Sie NumPy mit Rust
Berechnen Sie die Entropie für ein Array mit null Elementen in Numpy
Summe mehrerer Numpy-Arrays (Summe)
Ich habe GP mit Numpy geschrieben
Künstliche Datengenerierung mit Numpy
[Python] Berechnungsmethode mit numpy
Versuchen Sie die Matrixoperation mit NumPy
Animation der Diffusionsgleichung mit NumPy
Schuldenrückzahlungssimulation mit Numpy
SMO mit Python + NumPy implementiert
Kleben Sie die Saiten mit Numpy zusammen
Verwenden Sie OpenBLAS mit numpy, scipy
Arbeiten mit JSON-Dateien in Matlab
Implementierung der logistischen Regression mit NumPy
Behandeln Sie Base91-Schlüssel mit Python + Redis.
Behandeln Sie CSV-Dateien mit Django (Django-Import-Export)
Einfache Handhabung von Listen mit Python + SQLite3
Zeichne einen schönen Kreis mit Numpy
Implementieren Sie Keras LSTM Feed Forward mit Numpy
Behandeln Sie Excel-CSV-Dateien mit Python
Extrahieren Sie mehrere Elemente mit dem Numpy-Array
Behandelt verschiedene Datumsformate mit Pandas