如何在 swig 中使用 numpy.i?
How to use numpy.i in swig?
我正在尝试使用 swig 用 python 包装一些 c++ 代码,我需要将 NumPy 数组发送到 c++ 向量类中进行一些处理。
我的问题是我似乎无法访问我的 swig .i 文件中的"numpy.i"。
如何导入/包含 numpy.i?
add_vector.i
%module add_vector
%{
#define SWIG_FILE_WITH_INIT
#include "add_vector.h"
%}
%include "numpy.i"
%init %{
import_array();
%}
%include std_vector.i
%template(vecInt) std::vector<int>;
%include "add_vector.h"
生成文件
all:
rm -f *.so *.o *_wrap.* *.pyc *.gch add_vector.py
swig -c++ -python add_vector.i
g++ -O0 -g3 -fpic -c add_vector_wrap.cxx add_vector.h add_vector.cpp -I/home/tools/anaconda3/pkgs/python-3.7.3-h0371630_0/include/python3.7m/
g++ -O0 -g3 -shared add_vector_wrap.o add_vector.o -o _add_vector.so
tester.py
import add_vector as vec
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.empty(len(a))
vec.add(c,a,b)
print('c:', c)
输出:
rm -f *.so *.o *_wrap.* *.pyc *.gch add_vector.py
swig -c++ -python add_vector.i
add_vector.i:7: Error: Unable to find 'numpy.i'
Makefile:2: recipe for target 'all' failed
make: *** [all] Error 1
我正在使用 debian,以防万一。
谢谢!
将numpy.i
复制到与add_vector.i
相同的文件夹中。
或者使用命令行选项-lifile
并为其提供 numpy.i 文件的路径。
swig -l/path/to/numpy.i ...
有关 SWIG 命令行选项的列表,请参阅 http://www.swig.org/Doc3.0/SWIGDocumentation.html#SWIG_nn2
相关文章:
- Python 3.7 和 excess_args 的 SWIG 问题
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 为重写std::exception的库生成swig接口时出错
- C++返回 Numpy 数组的 Python 扩展模块
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- numpy C API 中的import_array如何工作?
- 在模板化函数中重新定义(忽略)的 SWIG 标识符
- 使用SWIG将numpy数组元素(int)传递给c++int
- 如何在 swig 中使用 numpy.i?
- 使用SWIG控制器将python中的numpy函数传递给C++
- 如何使用指针将 numpy 数组传递给 C++/SWIG,而无需依赖 numpy.i
- 为 numpy 创建一个简单的 SWIG 类型图
- 使用 swig 使 C++ 类看起来像一个 numpy 数组
- SWIG输入文件和矢量与numpy.使用%适用
- 使用 SWIG 将C++包装 <vector> 为 python NumPy 数组
- 如何用SWIG为一个矩阵类创建一个封装器到Numpy
- 如何使用SWIG将Fortran有序的2d numpy数组传递到c ++中