Ho un tipo di dati float personalizzato che emula i float a 128 bit utilizzando due float a 64 bit (la doppia doppia classe dd_real
da QD library). Da C++ voglio esportare un narray in python. So già come farlo per i float a 64 bit, ma per i doppioni raddoppia ho bisogno di specificare il mio dtype personalizzato. Come farlo?Come definire dtypes numpy float-type (C-API)
Nota: numpy ha il proprio float a 128 bit (np.float128) sfortunatamente questa mappa è long double
in C/C++ che è semplicemente un galleggiante a 80 bit memorizzato in 128 bit (su tutte le mie piattaforme).
In effetti, si dovrebbe essere in grado di farlo esattamente nello stesso modo in cui numpy esporta np.float128 (non so come è fatto), con la sola differenza che usa sul lato C++ invece di long double
.
Se questo aiuta, ho già esportato il tipo C++ dd_real
in python usando boost::python
forse questo può essere riutilizzato in qualche modo.
Finora sono stato in grado di ricerca la seguente
La documentazione NumPy per dtypes si riferisce a C-API per come esportare dtypes personalizzati, ma quel documento in qualche modo spiega solo le dtypes esistenti non come creane di nuovi.
Quando lo stackoverflow browsing ho trovato l'esempio this, ma mi chiedo se per
dd_real
questo potrebbe essere più semplice. Inoltre, non vedo dove viene effettivamente generato il dtype. Forse solo in python __ init__ tramitenp.typeDict['quaternion'] = np.dtype(quaternion)
. Come usare quel dtype in C++ quando voglio generare un ndarray?
Qual è l'equivalente di 'np.dtype (...)' in C++? –
Costruisci la lista con le tuple e chiama 'PyArray_DescrConverter'. Ma probabilmente è più facile esportare una serie di doppi e farlo sul lato Python. –
Beh, ho bisogno di costruire un narray da C++ e per questo ho bisogno del dtype in C++. –