Mi piacerebbe utilizzare una matrice numpy di tipo bool in C++ passando il suo puntatore tramite Cython. So già come farlo con altri tipi di dati come uint8. Farlo allo stesso modo con booleano non funziona. Sono in grado di compilare, ma non c'è la seguente eccezione durante il runtime:Passare un puntatore numerico (dtype = np.bool) a 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 ('?')
Ecco il mio C Metodo ++:
void Rectangle::count(bool * array, int size)
{
for (int i = 0; i < size; i++){
std::cout << array[i] << std::endl;
}
}
Il file Cython:
# 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)
E qui lo script python quello chiama il metodo e genera l'errore:
import numpy as np
import rect
b = np.array([True, False, False, True])
c = r.count(b, 4)
Per favore fatemi sapere se avete bisogno di ulteriori informazioni. Grazie!