我正在使用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数组的一些展平选项,然后是简单的迭代器开始/结束副本?)