Вы правильно используете конструктор dtype
; это obj
вызывает проблемы.
Конструкция по умолчанию boost::python::object obj;
устанавливает obj
как объект 'None'
Python. dtype
, связанный с 'None'
, является типом дескриптора массива NPY_DEFAULT
. И это соответствует double
при создании массива numpy
, что объясняет ваш вывод. (Это имеет смысл с точки зрения Python - тип массива numpy
по умолчанию является типом с плавающей запятой двойной точности.)
Вы можете создать dtype
с типом объекта (NPY_OBJECT
), используя
boost::python::numpy::dtype dt = boost::python::numpy::dtype(boost::python::object("O"));
что в вашем случае является исправлением. Я также взял на себя смелость использовать анонимный временный, как это сделано в документации Boost. "O"
обозначает тип объекта.