2017-08-23 1 views
0

J'ai des tableaux PNY bidimensionnels python et je veux les changer en format binaire qui peut être lu avec C++, Comme vous le savez , tableau bidimensionnel en C++ est un type de tableau unidimensionnel avec deux pointeurs qui sont utilisés pour localiser les éléments. Pourriez-vous me dire quelle fonction dans python peut être utilisée pour faire le travail ou toute autre solution?Comment stocker un tableau bidimensionnel numpy sur le disque comme une sorte de format binaire qui peut être lu avec C++

+1

Ma suggestion: utiliser une bibliothèque. J'utilise moi-même HDF5, il a une interface à la fois avec Python et C++. Vous pouvez également considérer le netCDF associé. Je suis également tombé sur [cette] bibliothèque (https://github.com/tdegeus/cnpy) plus expérimentale. –

Répondre

1

Ceci est trop long pour un commentaire, mais probablement pas assez complet pour fonctionner seul. Comme Tom l'a mentionné dans les commentaires sur votre question, l'utilisation d'une bibliothèque qui enregistre et charge dans un format bien défini (hdf5, .mat) en python et C++ est probablement la solution la plus simple. Si vous ne voulez pas trouver et installer une telle bibliothèque, lisez la suite.

Numy a la possibilité d'enregistrer des données en utilisant numpy.save (voir this), Le format (décrit here) indique il y a un en-tête, avec des informations sur le type de données et le nombre de forme de tableau, suivi par les données. Donc, à moins que vous ne vouliez écrire un analyseur complet (vous ne le faites pas), vous devriez vous assurer que python enregistre systématiquement les données en float64 (ou n'importe quel type), dans l'ordre c (fortran ordering est l'autre option).

Ensuite, le code C++ doit juste vérifier que le type de données de tableau est float64, que l'ordre correct est utilisé et la taille du tableau. Allouer la quantité de mémoire appropriée, et vous pouvez charger ce nombre d'octets à partir du fichier directement dans la mémoire allouée. Pour créer une indexation 2d, vous devez allouer un tableau de pointeurs à chaque 'ligne' de la mémoire allouée.

Ou utilisez simplement une bibliothèque qui gérera tout cela pour vous.