Ich möchte ein numpy Array Typ Bool in C++ verwenden, indem Sie den Zeiger über Cython übergeben. Ich weiß bereits, wie man es mit anderen Datentypen wie uint8 macht. Auf die gleiche Weise mit Boolean funktioniert es nicht. Ich bin in der Lage zu kompilieren, aber es gibt die folgende Ausnahme während der Laufzeit:Übergeben eines numpy Zeigers (dtype = np.bool) an C++
Traceback (most recent call last):
File "test.py", line 15, in <module>
c = r.count(b, 4)
File "rect.pyx", line 41, in rect.PyRectangle.count (rect.cpp:1865)
def count(self, np.ndarray[bool, ndim=1, mode="c"] array not None, int size):
ValueError: Does not understand character buffer dtype format string ('?')
Hier ist mein C++ Methode:
void Rectangle::count(bool * array, int size)
{
for (int i = 0; i < size; i++){
std::cout << array[i] << std::endl;
}
}
Die Cython Datei:
# distutils: language = c++
# distutils: sources = Rectangle.cpp
import numpy as np
cimport numpy as np
from libcpp cimport bool
cdef extern from "Rectangle.h" namespace "shapes":
cdef cppclass Rectangle:
Rectangle(int, int, int, int) except +
int x0, y0, x1, y1
void count(bool*, int)
cdef class PyRectangle:
cdef Rectangle *thisptr # hold a C++ instance which we're wrapping
def __cinit__(self, int x0, int y0, int x1, int y1):
self.thisptr = new Rectangle(x0, y0, x1, y1)
def __dealloc__(self):
del self.thisptr
def count(self, np.ndarray[bool, ndim=1, mode="c"] array not None, int size):
self.thisptr.count(&array[0], size)
Und hier der Python-Skript das ruft die Methode auf und erzeugt den Fehler:
import numpy as np
import rect
b = np.array([True, False, False, True])
c = r.count(b, 4)
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank!