Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

inconsistent numpy dtype in python and C++

Abierto
#304 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp, numpy, python
Área
api, backend

Línea de trabajo

Reproduce el informe utilizando la extensión dummy.cpp proporcionada y el script run_dummpy.py, y ejecútalo con las versiones indicadas de Python, NumPy y Boost. Inspecciona cómo llegan los dos argumentos ndarray al binding de Boost.NumPy y verifica que cada uno conserve su dtype; se considera terminado cuando la salida de C++ coincide sistemáticamente con float32 y float64.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

Lenguaje dominante
C++
Estrellas
537
Forks
223
Merge medio
11 h 22 min
PR fusionados (30 d)
2

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de boostorg/python

Todos los issues de boostorg/python

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.