C++ Varianten von Numpy-Funktionen, Numpy C-Api

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
thesaint4cs
User
Beiträge: 1
Registriert: Montag 22. November 2010, 11:01

Hallo zusammen!

ich beschäftige mich seit kurzem mit der Erweiterung von Python durch C++ Module, da Python allein an einigen Stellen für meine Zwecke zu langsam ist. Insbesondere iteriere ich mit Hilfe von C++ sehr schnell über Numpy-Arrays, stoße jetzt allerdings auf Schwierigkeiten. Innerhalb der Iterationen in C++ benötige ich die Varianz eines Arrays und würde dafür gerne wieder numpy-Funktionen verwenden.

Code: Alles auswählen

#Python
def myfunc(meinnumpyarray):
	N = 10000
	a = 5000
	for i in range(N):
		var = meinnumpyarray[i:i+a].var()
		# mehr Code mit Zugriffen auf meinnumpyarray[xyz] und var
	return blablubb
//C++
static PyObject * py_myfunc(PyObject *self, PyObject *args) {
	PyArrayObject *meinnumpyarray;
	PyArg_ParseTuple(args, "O!", &PyArray_Type, &meinnumpyarray);
	int N = 10000;
	int a = 5000;
	for (int i=0;i<N;i++) {
		//derzeit: Umständliche und zu langsame Berechnung von var mittels eigenem C++-Code
		//mehr Code mit Zugriffen auf meinnumpyarray und var, Zugriff hier in C++ über: * (double *) (meinnumpyarray->data + xyz*meinnumpyarray->strides[0])
	return blablubb;
}
In der Numpy C-API habe ich Funktionen wie "PyArray_Mean" gefunden, die mir das Leben an dieser Stelle erleichtern könnten, aber ich bin mir nicht sicher, wie ich den Schritt "newarray = meinnumpyarray[i:i+a]" in C++ vollziehen kann.

Viele Grüße und schonmal vielen Dank,
thesaint4cs
BlackJack

@thesaint4cs: Keine direkte Antwort auf die Frage, aber spricht etwas dagegen Cython zu verwenden statt C++? Damit sollte das mischen von C und Python deutlicher einfacher sein, als beim manuellen schreiben der Anbindung.
Antworten