Używam python do wywoływania metod w udostępnionej bibliotece C++. Mam problem z konwertowaniem tablicy numpy 2D na szyk C++ 2D jako wejście funkcji. Mam stworzony zabawkowy przykład, który pokazuje problem. Zapraszam do kompilacji i wypróbowania!Konwertuj tablicę 2D numpy na C++ short **?
Oto kod python (soexample.py):
# Python imports
from ctypes import CDLL
import numpy as np
# Open shared CPP library:
cpplib=CDLL('./libsoexample.so')
cppobj = cpplib.CPPClass_py()
# Stuck on converting to short**?
array = np.array([[1,2,3],[1,2,3]])
cpplib.func_py(cppobj,array)
Oto biblioteki C++ (soexample.cpp):
#include <iostream>
using namespace std;
class CPPClass
{
public:
CPPClass(){}
void func(unsigned short **array)
{
cout << array[0][0] << endl;
}
};
// For use with python:
extern "C" {
CPPClass* CPPClass_py(){ return new CPPClass(); }
void func_py(CPPClass* myClass, unsigned short **array)
{
myClass->func(array);
}
}
które skompilować za pomocą następującego polecenia:
g++ -fPIC -Wall -Wextra -shared -o libsoexample.so soexample.cpp
Po uruchomieniu pliku Pythona pojawia się następujący błąd:
Jak prawidłowo poprawić ten niefortunny TypeError
?
wierzę krótkie ints c są 16 bity. Domyślnie numpy int, z drugiej strony, ma zazwyczaj 32 bity. Możesz spróbować utworzyć tablicę jako 'tablica = np.array ([[1,2,3], [1,2,3]], dtype = np.uint16)' i zobaczyć, co się stanie. – Jaime