【发布时间】:2013-04-10 12:27:21
【问题描述】:
我有一个 C++ 库,其中当前有一些方法返回 std::vector,定义如下
public:
const std::vector<uint32_t>& getValues() const;
我目前正在使用 SWIG 为 Python 包装整个库,目前运行良好。
SWIG 很好地包装了这个 getValues() 函数,以便它返回一个 Python 元组。问题出在我的 Python 端代码中,我想将其转换为 NumPy 数组。当然我可以这样做:
my_array = np.array(my_object.getValues(), dtype='uint32')
但这会导致原始向量中的所有条目首先由 SWIG 复制到 Python 元组中,然后由我再次复制到 numpy 数组中。由于这个向量可能非常大,我宁愿避免制作这两个副本,并希望有一种方法让 SWIG 在内存中的原始向量数据周围创建一个 numpy.array 包装器。
我已阅读 numpy.i 的文档,但其中明确提到不支持输出数组,因为它们似乎在 C 样式数组而不是 C++ 向量的假设下工作。
numpy.array 的底层数据结构和 C++ std::vector 一样只是一个 C 样式的数组,所以我希望在内存中访问相同的数据是可行的。
有没有办法让 SWIG 返回一个不复制原始数据的 numpy.array?
【问题讨论】: