如何将3D numpy数组写入C+中的一维std::vector+;使用boost::python?

如何将3D numpy数组写入C+中的一维std::vector+;使用boost::python?,python,c++,numpy,boost,boost-python,Python,C++,Numpy,Boost,Boost Python,我正在使用boost::python编写一个python扩展,我希望有一个以3D numpy数组为参数的函数(这是不能更改的)。但是,在内部,我使用的函数采用1D std::vectors和列主顺序(x递增最快,z递增最慢) 因此,我猜函数将具有以下签名: void takeNumpyArray(boost::python::numeric::array& array) { std::vector<float> vec; // Make sure the a

我正在使用boost::python编写一个python扩展,我希望有一个以3D numpy数组为参数的函数(这是不能更改的)。但是,在内部,我使用的函数采用1D std::vectors和列主顺序(x递增最快,z递增最慢)

因此,我猜函数将具有以下签名:

void takeNumpyArray(boost::python::numeric::array& array)
{
    std::vector<float> vec;

    // Make sure the array stores floats
    // Find out dimensions of array (make sure it's 3)
    vec.reserve(xmax*ymax*zmax);  
    for(size_t x=0; x<xmax; ++x)
        for(size_t y=0; y<ymax; ++y)
            for(size_t z=0; z<zmax; ++z)
                vec[x+xmax*(y+ymax*z)] = array[std::make_tuple(x,y,z)];

    std::cout << "Success!";
}
void takeNumpyArray(boost::python::numeric::array&array)
{
std::vec;
//确保数组存储浮动
//找出数组的维数(确保为3)
向量储备(xmax*ymax*zmax);

对于(sisixt x=0;你看了Cython吗?它可以帮助你打包C++ C++代码,并与NoppyArayi接口,已经在Boost Python上做了一些工作,不愿意在这个阶段切换。这可能不是你想要的,但可能是进一步调查的良好起点。