Python C / C ++ - Erweiterung: Übergeben Sie einen Teil der Daten als np.array an Python (Schritt setzen)

Zeigen Sie C / C ++ - Daten in Python als np.array an.

typedef struct Particle {
  float x[3], v[3];
} Particle;

const int np=10;
Particle* const p= calloc(sizeof(Particle), np);

for(int i=0; i<np; ++i) {
  p[i].x[0]= (float) i + 1;
}

Wenn Sie dies als np.array an Python übergeben möchten, können Sie die Funktion PyArray_SimpleNewFromData verwenden. [^ 1]

Hier werde ich Ihnen jedoch zeigen, wie Sie nur einen Teil der Daten "x [3]" als np.array an Python übergeben. In einigen Fällen kann die Datenstruktur mehrere Typen enthalten und nicht alle in einem np.array.

Wenn die Daten nicht kontinuierlich so im Speicher vorhanden sind, sondern in regelmäßigen Abständen angeordnet sind, können Sie "Schritte" festlegen. [^ 2]

PyObject* PyArray_New(PyTypeObject* subtype, int nd, npy_intp* dims, 
			           int type_num, npy_intp* strides, void* data, 
			           int itemsize, int flags, PyObject* obj);

Was ist "Schritte []"? Wenn "a" np.array ist, ist "Schritte [0]" die Byte-Differenz zwischen "a [i, j]" und "a [i + 1, j]", "Schritte []". [1] ist die Byte-Differenz zwischen a [i, j] und a [i, j + 1] `.

static PyObject* py_as_nparray(PyObject *self, PyObject *args)
{
  const int nd=2;
  const int ncol= 3;
  npy_intp dims[]= {np, ncol};
  npy_intp strides[]= {sizeof(Particle), sizeof(float)};

  return PyArray_New(&PyArray_Type, nd, dims, NPY_FLOAT, strides, p->x, 0, 0, 0);
}

Ergebnisse aus Python

import numpy as np
import cext08

a = cext08.as_nparray()

[[  1.   0.   0.]
 [  2.   0.   0.]
 [  3.   0.   0.]
 [  4.   0.   0.]
 ...

Der gesamte Code befindet sich auf Github

https://github.com/junkoda/python_c_ext/tree/master/08_nparray_stride

Recommended Posts

Python C / C ++ - Erweiterung: Übergeben Sie einen Teil der Daten als np.array an Python (Schritt setzen)
Python C / C ++ - Erweiterungsmuster-Übergeben Sie Daten als np.array an Python
Übergeben Sie die OpenCV-Daten der ursprünglichen C ++ - Bibliothek an Python
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
[Pfeffer] Übergibt die gesamten JSON-Daten, die durch Python-Anforderung erhalten wurden, an das Tablet.
Übergeben Sie den Pfad des importierten Python-Moduls
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Legen Sie den Prozessnamen des Python-Programms fest
[Einführung in Data Scientist] Grundlagen von Python ♬
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Organisieren Sie Python-Tools, um die anfängliche Bewegung von Datenanalyse-Wettbewerben zu beschleunigen
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Verwendung der C-Bibliothek in Python
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Die Geschichte des Lesens von HSPICE-Daten in Python
Übergang von Baseball aus Daten gesehen
Lesen von Originaldaten oder externen Daten im Internet mit scikit-learn anstelle eines angehängten Datensatzes wie Iris
"Cython" -Tutorial, um Python explosiv zu machen: Übergeben Sie das C ++ - Klassenobjekt an das Klassenobjekt auf der Python-Seite. Teil 2
[Python] Berechnungsmethode der Approximationsformel von Abschnitt 0 wie Excel [scikit-learn] Memo
Nehmen Sie eine Instanz einer Python-Ausnahmeklasse nicht direkt als Argument für die Ausnahmeklasse!
Es ist Zeit, ernsthaft über die Definition und die Fähigkeiten von Datenwissenschaftlern nachzudenken
Einfache Möglichkeit, die Quelle der Python-Module zu überprüfen
Die Wand beim Ändern des Django-Dienstes von Python 2.7 auf Python 3-Serie
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Vorlage des Python-Skripts zum Lesen des Inhalts der Datei
So ermitteln Sie die Anzahl der Stellen in Python
(Python) Behandeln Sie ganzzahlige Werte als eine Reihe von Flags
Option [Python] zum Deaktivieren der Ausgabe von click.progressbar
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Den Inhalt der Daten in Python nicht kennen
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
[Blender] So legen Sie die Auswahlelemente von EnumProperty dynamisch fest
Geben Sie MinGW als den in Python verwendeten Compiler an
Verwenden wir die offenen Daten von "Mamebus" in Python
Setzen Sie die angegebene Spalte von QTableWidget auf ReadOnly StyledItemDelegate
14 Tests, um den überraschend verwirrenden Umfang von Python zu verstehen
Verstehen Sie den Status des Datenverlusts - Python vs. R.
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Die Website von "The Hitchhiker's Guide to Python" wurde vollständig übersetzt.
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
[C / C ++] Übergeben Sie den in C / C ++ berechneten Wert an eine Python-Funktion, um den Prozess auszuführen, und verwenden Sie diesen Wert in C / C ++.
"Cython" -Tutorial, um Python explosiv zu machen: Übergeben Sie ein C ++ - Klassenobjekt an ein Klassenobjekt auf der Python-Seite. Teil ①
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
(Möglicherweise) Python 3 Engineer-Zertifizierungsdatenanalyse-Test, den Sie selbst bestehen können
Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)
der Zen von Python
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
[Python] Es kann nützlich sein, die Datenrahmen aufzulisten
Erleichtern Sie die Anzeige von Python-Modulausnahmen
Die Geschichte der Einführung von Jedi (automatisches Vervollständigungspaket von Python) in Emacs
Verschiedene Methoden zur Berechnung der Ähnlichkeit zwischen Daten mit Python
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft