如何在JSWG中将一个Javg C++矢量矢量转换为Python < >将向量返回类型转换成python列表的sC++类型是什么? std::vector<std::vector<int>>
在bindings.i文件中,放置以下类型映射:如何在JSWG中将一个Javg C++矢量矢量转换为Python < >将向量返回类型转换成python列表的sC++类型是什么? std::vector<std::vector<int>>,python,c++,swig,Python,C++,Swig,在bindings.i文件中,放置以下类型映射: %typemap(out) std::vector<std::vector<int>>& { for(int i = 0; i < $1->size(); ++i) { int subLength = $1->data()[i].size(); npy_intp dims[] = { subLength }; PyOb
%typemap(out) std::vector<std::vector<int>>&
{
for(int i = 0; i < $1->size(); ++i)
{
int subLength = $1->data()[i].size();
npy_intp dims[] = { subLength };
PyObject* temp = PyArray_SimpleNewFromData(1, dims, NPY_INT, $1->data()[i].data());
$result = SWIG_Python_AppendOutput($result, temp);
}
}
SWIG中有内置的支持,但它返回一个元组而不是列表。但是,这对您来说可能已经足够了:
%module test
%{
#include <vector>
%}
%include <std_vector.i> // built-in support
%template() std::vector<int>; // declare instances of templates used to SWIG.
%template() std::vector<std::vector<int> >;
%inline %{ // Example code.
std::vector<std::vector<int> > func()
{
std::vector<std::vector<int> > vv;
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vv.push_back(v);
v.clear();
v.push_back(4);
v.push_back(5);
vv.push_back(v);
return vv;
}
%}
由于数据的大小,我们需要一个Numpy数组列表,但这可能适用于小型数据集。包含vector std::vector的完整模板定义可能更安全
>>> import test
>>> test.func()
((1, 2, 3), (4, 5))