Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

inconsistent numpy dtype in python and C++

Ouverte
#304 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
cpp, numpy, python
Domaine
api, backend

Piste de recherche

Reproduisez le rapport à l’aide de l’extension dummy.cpp fournie et du script run_dummpy.py, puis exécutez-le avec les versions indiquées de Python, NumPy et Boost. Examinez comment les deux arguments ndarray atteignent le binding Boost.NumPy et vérifiez que chacun conserve son dtype ; le travail est terminé lorsque la sortie C++ correspond systématiquement à float32 et float64.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Hi,
I'm trying to use the boost numpy bindings. If I pass two ndarray with different dtype to C++, they don't preserve the correct dtype. Here is a simple example:
dummy.cpp:

#include <iostream>
#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

namespace py = boost::python;
namespace np = boost::python::numpy;

void dummy(np::ndarray const& a, np::ndarray const& b) {

    char const* at = py::extract<char const* >(py::str(a.get_dtype()));
    char const* bt = py::extract<char const* >(py::str(b.get_dtype()));

    std::cout << at << std::endl;
    std::cout << bt << std::endl;
}


BOOST_PYTHON_MODULE(dummy) {
   Py_Initialize(); // need initialize in BOOST_PYTHON_MODULE, or will get segmentation fault and core dump 
   np::initialize();
   py::def("dummy", dummy);
}

compile

g++ -lboost_python38 -lboost_numpy38 -L$CONDA_PREFIX/lib -I$CONDA_PREFIX/include -I$CONDA_PREFIX/include/python3.8 -fPIC --shared -o dummy.so dummy.cpp

run_dummpy.py

import numpy as np
import dummy

a = np.array([[1, 2, 3], [4, 5, 6]], dtype = np.float32)
print("python", a.dtype)
b = np.array([[1, 2, 3], [4, 5, 6]], dtype = np.double)
print("python", b.dtype)

dummy.dummy(a, b)

The output is inconsistent. The first time I run it by python run_dummy.py it gives

python float32
python float64
__str__
float64

If I re-run it python run_dummy.py , it gives

python float32
python float64
float64
float64

Still not the right output.
I'm using python 3.8.2, numpy 1.18.1, and boost 1.72.0. boost is installed from anaconda conda install -c conda-forge boost
Could you help? Thanks

Langage dominant
C++
Étoiles
537
Forks
223
Merge moyen
11 h 22 min
PR mergées (30 j)
2

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de boostorg/python

Toutes les issues de boostorg/python

Issues similaires

Plus d'issues C++

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.