如何使用boost :: python在C ++中将3D numpy数组写入1D std :: vector?

时间:2016-09-09 17:02:52

标签: 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 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!";
}

所以我在文档中找不到一些东西(比如尺寸和元素类型)。

问题:如何使用boost :: python将3D numpy数组复制到std :: vector中?

奖金:有没有办法在没有手动索引的情况下执行此操作(使用numpy数组的一些展平选项,然后是简单的迭代器开始/结束副本?)

0 个答案:

没有答案