Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

inconsistent numpy dtype in python and C++

Aberta
#304 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
cpp, numpy, python
Domínio
api, backend

Direção de pesquisa

Reproduza o relatório usando a extensão dummy.cpp fornecida e o script run_dummpy.py, e execute-o com as versões indicadas do Python, NumPy e Boost. Inspecione como os dois argumentos ndarray chegam ao binding do Boost.NumPy e verifique se cada um mantém seu dtype; considera-se concluído quando a saída do C++ corresponde consistentemente a float32 e float64.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
C++
Estrelas
537
Forks
223
Merge médio
11h 22min
PRs com merge (30d)
2

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de boostorg/python

Todas as issues de boostorg/python

Issues semelhantes

Mais issues de C++

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.