Wickeln Sie C mit Cython für Python ein

Aus "Python durch Fusion mit Cython C beschleunigen" O'Reilly Ich habe versucht, unter Ubuntu zu verfolgen, dass eine in C geschriebene Funktion in Python importiert und ausgeführt werden kann.

Das Beispiel dieses Buches befindet sich zunächst auf Github. Laden Sie es daher als Zip-Datei herunter. https://github.com/cythonbook/examples

Wechseln Sie in das extrahierte Verzeichnis. examples-master/07-wrapping-c/01-wrapping-c-functions-mt-random

Hier gibt es ein Makefile, also versuche es zu machen. Dann scheinen die notwendigen Dateien erstellt worden zu sein Das Beispiel auf Seite 128 desselben Buches funktioniert mit IPython. In [1]: import mt_random

In [2]: mt_random.init_state(42)

In [3]: mt_random.rand() Out[3]: 0.37454011439684315

Natürlich können Sie C-Funktionen in Cython wie im Buch beschrieben umschließen.

Erstens gibt es eine C-Quelldatei und eine Header-Datei.

Deklaration des externen C-Codes in Cython (Erweiterung .pxd)

mt.pxd


cdef extern from "mt19937ar.h":
    void init_genrand(unsigned long s)
    double genrand_real1()

C-Funktionsumbruch (Erweiterung .pyx)

mt_random.pyx


# distutils: sources=["mt19937ar.c"]
cimport mt

def init_state(unsigned long s):
    mt.init_genrand(s)

def rand():
    return mt.genrand_real1()

Setup.py-Datei, die Ihnen das Kompilieren erklärt

setup.py


from distutils.core import setup, Extension
from Cython.Build import cythonize

ext = Extension("mt_random",
                sources=["mt_random.pyx", "mt19937ar.c"])

setup(name="mersenne_random",
      ext_modules = cythonize([ext]))

Und das Makefile, auf dem setup.py ausgeführt wird, war bereits in der Zip-Datei enthalten. Wenn Sie dies tun, erhalten Sie das Ergebnis der vorherigen Ausführung.

Ich fand, dass ich es umschließen kann, indem ich pxd-Datei, pyx-Datei, setup.py schreibe.

Über das auf diese Weise implementierte Modul mt_random help(mt_random) Dann Es ist auch praktisch, die unten gezeigte Hilfe zu sehen.

Help on module mt_random: NAME mt_random

FILE / (Ausgelassen) /examples-master/07-wrapping-c/01-wrapping-c-functions-mt-random/mt_random.so

FUNCTIONS init_state(...)

rand(...)

DATA test = {}

Um mehr als dieses Beispiel zu verstehen, scheint es Kapitel 7 desselben Buches zu lesen.

Auch wenn Sie nicht alles in C schreiben, schreiben Sie nur den Engpass in C. Ich bin froh, dass das Schreiben eines Wrappers mit Cython ausreicht.

Recommended Posts

Wickeln Sie C mit Cython für Python ein
Wrap C ++ mit Cython zur Verwendung von Python
Verwenden von C ++ - Funktionen aus Python mit pybind11
Rufen Sie C von Python mit DragonFFI auf
Tipps zum Aufrufen von Python von C.
Verwenden Sie DeepL mit Python (für die Artikelübersetzung)
Array-Pufferobjekt, das mit Cython verwendet werden kann
Wrap (Teil der) AtCoder Library in Cython zur Verwendung in Python
Verwenden Sie thingspeak aus Python
[Python] Verwenden Sie JSON mit Python
Verwenden Sie fließend Python
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 9 Verwendung aus der C-Sprache
Verwenden Sie MySQL aus Python
Verwenden Sie vorerst Logger mit Python
Verwenden Sie Mecab mit Python 3
Verwenden Sie DynamoDB mit Python
~ Tipps für Python-Anfänger mit Liebe von Pythonista ① ~
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Python mit Docker
Verwenden Sie MySQL aus Python
Verwenden Sie BigQuery aus Python.
~ Tipps für Python-Anfänger mit Liebe von Pythonista ② ~
Verwenden Sie mecab-ipadic-neologd von Python
C-Sprache, Java, Python-Benchmarks mit Primfaktorisierung
Verwenden Sie Python, das von pyenv für die PL / Python-Ausführungsumgebung installiert wurde
Programmieren Sie überall mit Ihrem Smartphone! (Empfohlen für C-Sprache / Python)
Verwenden Sie die Trello-API mit Python
Verwenden Sie TUN / TAP mit Python
Verwenden Sie Cython mit Jupyter Notebook
Verwenden Sie die Unterschall-API mit Python3
Mit Skype benachrichtigen Sie mit Skype von Python!
Verwenden Sie die e-Stat-API von Python
Verwenden wir nach Überprüfung mit Python eine Skriptsprache für eine komfortable C ++ - C ++ - Implementierung
Verwenden Sie IvyFEM (Finite-Elemente-Methodenbibliothek für .NET) aus Python
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Löse ABC163 A ~ C mit Python
Python: So verwenden Sie Async mit
Verwenden Sie Stanford Core NLP von Python
Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden von Rstan aus Python mit PypeR
Installieren Sie Python von der Quelle mit Ansible
Rufen Sie popcount von Ruby / Python / C # auf
Erste Schritte mit Python für PHPer-Klassen
Verwenden Sie NAIF SPICE TOOL KIT mit Python
Lesen und verwenden Sie Python-Dateien aus Python
Verwenden Sie als nächstes Python (Flask) für Heroku!
Verwenden Sie zwangsweise Google Translate aus Python
Python-Spickzettel (für C ++ erfahren)
Verwenden Sie rospy mit virtualenv in Python3
Löse ABC168 A ~ C mit Python