C++;二维向量到二维pybind11数组 我对C++很陌生,并且与PyBin斗争。我根本不知道如何说服pyBIN将2D向量从C++转换成Python可读格式。

C++;二维向量到二维pybind11数组 我对C++很陌生,并且与PyBin斗争。我根本不知道如何说服pyBIN将2D向量从C++转换成Python可读格式。,python,c++,arrays,numpy,pybind11,Python,C++,Arrays,Numpy,Pybind11,这就是我心目中的代码: py::array_t<float> to_matrix(std::vector<std::vector<float>> &vals) { int N = vals.size(); int M = 6; py::array_t<float>({N, M}) arr; for (int i = 0; (i < N); i++) { for (int j =

这就是我心目中的代码:

py::array_t<float> to_matrix(std::vector<std::vector<float>> &vals)
{
    int N = vals.size();
    int M = 6;
    py::array_t<float>({N, M}) arr;
    for (int i = 0; (i < N); i++)
    {
        for (int j = 0; (j < M); j++)
        {
            arr[i][j] = vals[i][j];
        };
    };
    return arr;
};
py::数组到矩阵(std::vector和vals)
{
int N=vals.size();
int M=6;
py::数组_t({N,M})arr;
对于(int i=0;(i
输入是n行和6列的向量,只是一个很长的数据点列表。理想情况下,我希望输出为numpy数组,但任何python数据结构都可以(例如,列表列表)

文档让它听起来很简单,但我无法理解。我做错了什么


提前感谢您的帮助。

这里有一些事情要做,但让我们从一个简单的例子开始。以下函数将从硬编码的
std::vector

py::数组到矩阵()
{
标准::向量VAL={
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
size_t N=vals.size();
size_t M=vals[0]。size();
py::array_t arr({N,M});
自动ra=阵列可变_未选中();
对于(大小i=0;i
有两件事需要注意,首先数组形状是数组的构造函数参数。第二种方法是使用
mutable_unchecked
来获取可用于进行赋值的代理对象

在你的例子中,向量的矢量将来自C++代码的其他地方。 但请注意,pybind11还提供了包装容器的样板,如
std::vector
。这些可在标题
pybind11/stl_bind.h
中找到,并允许您执行此操作

std::vector make_vector()
{
标准::向量VAL={
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
返回VAL;
}
PYBIND11_模块(foo,m)
{
py::bind_向量(m,“FloatVector2D”);
m、 def(“make_vector”、&make_vector);
}

这样的对象不会完全等同于numpy数组(没有
形状
属性等)

谢谢,这正是我要寻找的,并且完美地解决了我的问题:)是“FloatVector2D”是一个特殊的名称,以便pybind使用正确的绑定还是一个任意的命名?我只是找不到太多关于这个的文档不,完全是武断的,