Questions tagged «swig»

1
有什么方法可以将pythonappend与SWIG的新内置功能一起使用?
我有一个与SWIG完美搭配的小项目。特别是,我的某些函数返回std::vectors,在Python中将其转换为元组。现在,我做了很多数字运算,因此我只是将它们从C ++代码返回后,将它们转换为numpy数组。为此,我在SWIG中使用了以下内容。 %feature("pythonappend") My::Cool::Namespace::Data() const %{ if isinstance(val, tuple) : val = numpy.array(val) %} (实际上,有几个名为Data的函数,其中一些返回浮点数,这就是为什么我检查它val实际上是一个元组的原因。)这工作得很漂亮。 但是,我也想使用-builtin现在可用的标志。很少调用这些Data函数,并且大多数都是交互式的,因此它们的缓慢性不是问题,但是使用内置选项可以显着加快其他缓慢循环的速度。 问题是当我使用该标志时,pythonappend功能将被静默忽略。现在,Data再次返回一个元组。有什么办法我仍然可以返回numpy数组吗?我尝试使用类型映射,但结果变得一团糟。 编辑: Borealid很好地回答了这个问题。仅出于完整性考虑,我包括了一些相关但略微不同的类型映射,因为我是通过const引用返回的,并且我使用了vectors的向量(不要开始!)。这些差异是如此之大,以至于我不希望其他人为找出细微的差异而绊脚石。 %typemap(out) std::vector<int>& { npy_intp result_size = $1->size(); npy_intp dims[1] = { result_size }; PyArrayObject* npy_arr = (PyArrayObject*)PyArray_SimpleNew(1, dims, NPY_INT); int* dat = (int*) PyArray_DATA(npy_arr); for (size_t i = 0; i < …
77 python  numpy  swig 

2
如何使用SWIG将numpy数组转换为vector <int>&(reference)
我的目标: 在python中创建3个numpy数组(其中2个将使用特定的值初始化),然后通过swig将所有三个数组发送到c ++函数中作为矢量引用(这是为了避免复制数据和失去效率)。进入c ++函数后,将两个数组相加,然后将它们的总和放在第三个数组中。 vec_ref.h #include &lt;vector&gt; #include &lt;iostream&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2); vec_ref.cpp #include "vec_ref.h" #include &lt;cstring&gt; // need for size_t #include &lt;cassert&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2) { std::cout &lt;&lt; "inside add_vec_ref" &lt;&lt; std::endl; assert(src1.size() == src2.size()); dst.resize(src1.size()); for (size_t i = 0; …
10 python  c++  numpy  vector  swig 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.