Mam niestandardowy typ danych pływających, który emuluje pływające po 128 bitów przy użyciu dwóch platform 64-bitowych (podwójna podwójna klasa dd_real
z QD library). Z C++ chcę wyeksportować ndarray do Pythona. Już wiem, jak to zrobić dla 64-bitowych platform, ale dla podwójnych-podwójnych muszę w jakiś sposób określić własny niestandardowy typ dtype. Jak to zrobić?Jak zdefiniować niestandardowe typy dumpów typu float (C-API)?
Uwaga: numpy ma własny 128-bitowy float (np.float128), niestety ten mapuje do long double
w C/C++, który jest zaledwie 80-bitowym plikiem pływającym przechowywanym w 128-bitowym (na wszystkich moich platformach).
W rzeczywistości, powinno być możliwe zrobienie tego dokładnie w taki sam sposób, jak eksport numpy np.float128 (po prostu nie wiem jak to się robi), z tą tylko różnicą, że używa on dd_real
po stronie C++ zamiast long double
.
Jeśli to pomaga, już wyeksportowałem typ C++ dd_real
do pythona za pomocą boost::python
, może to może być w jakiś sposób ponownie wykorzystane.
Do tej pory udało mi się zbadać następujące
numpy dokumentacja dtypes dotyczy C-API na temat eksportu niestandardowych dtypes, ale dokument ten jakoś tylko wyjaśnia istniejące dtypes nie jak tworzyć nowe.
Kiedy stackoverflow znalazłem przykład this, ale zastanawiam się, czy dla
dd_real
może to być prostsze. Nie widzę również, gdzie faktycznie generowany jest typ dtype. Może tylko w pytonie __ init__ przeznp.typeDict['quaternion'] = np.dtype(quaternion)
. Jak używać tego dtype w C++, gdy chcę wygenerować ndarray?
co jest odpowiednikiem 'np.dtype (...)' w C++? –
Skonstruuj listę za pomocą krotek i wywołaj 'PyArray_DescrConverter'. Ale prawdopodobnie łatwiej jest wyeksportować tablicę podwójnych i zrobić to po stronie Pythona. –
Cóż, potrzebuję skonstruować ndarray z C++ i do tego potrzebuję dtype w C++. –