Python Expose boost::multi_阵列<;标准::字符串,1>;巨蟒

Python Expose boost::multi_阵列<;标准::字符串,1>;巨蟒,python,c++,c++11,numpy,boost,Python,C++,C++11,Numpy,Boost,我试图将一个boost::multi_数组公开为numpy数组,但我得到了 ValueError: data type must provide an itemsize 如果我尝试用Python访问它。我使用以下模板创建Python对象: template<typename TMultiArray, typename TData> bp::object getNumpyArray(boost::shared_ptr<TMultiArray> array, int dim

我试图将一个
boost::multi_数组
公开为numpy数组,但我得到了

ValueError: data type must provide an itemsize
如果我尝试用Python访问它。我使用以下模板创建Python对象:

template<typename TMultiArray, typename TData>
bp::object getNumpyArray(boost::shared_ptr<TMultiArray> array, int dimensions, int npy_type) {
    TData* data = (*array).data();
    npy_intp* shape = (npy_intp*) (*array).shape();
    PyObject* pyObj = PyArray_SimpleNewFromData(dimensions, shape, npy_type, data);
    boost::python::object arr(boost::python::handle<>(boost::python::borrowed(pyObj)));
    return arr;
}
模板
对象getNumpyArray(boost::共享数组,整数维,整数npy类型){
TData*data=(*array).data();
npy_intp*形状=(npy_intp*)(*数组).shape();
PyObject*pyObj=PyArray\u SimpleNewFromData(尺寸、形状、npy\u类型、数据);
boost::python::objectarr(boost::python::handle(boost::python::followed(pyObj));
返回arr;
}
致电:

getNumpyArray<boost::multi_array<std::string, 1>, std::string>(array, 1, NPY_STRING);
getNumpyArray(数组,1,NPY\u字符串);

我使用的是numpy 1.7.1。

您所说的“访问”是什么意思?为什么要使用Numpy数组来存储字符串?可能是Numpy无法对字符串数组进行“访问”,而Boost没有任何问题。@这是一个更大项目的一部分,因此我目前使用一个包装类来存储int/float和字符串。在内部,我使用一个multi_数组。主要用例用于数值计算,因此我在python端使用了numpy。我原以为如果使用字符串,它也会提供一些自动转换,但正如我现在所理解的,numpy对字符串使用不同的内存模型,所以这无法实现。我想我现在将使用一种不同的方法来使用字符串数组。