我使用 SWIG 将一些 C++ 代码粘合到 Python (2.6),并且该粘合的一部分包括一段代码,该代码将大型数据字段(数百万个值)从 C++ 端转换为 Numpy 数组。我能想到的最好方法是为类实现一个迭代器,然后提供一个 Python 方法:
def __array__(self, dtype=float):
return np.fromiter(self, dtype, self.size())
问题是每个迭代器next
调用的成本非常高,因为它必须经过大约三到四个 SWIG 包装器。这需要太长的时间。我可以保证 C++ 数据是连续存储的(因为它们位于 std::vector 中),并且感觉 Numpy 应该能够获取指向该数据开头的指针以及它包含的值的数量,并且直接阅读。
有没有办法传递一个指针internal_data_[0]
和价值internal_data_.size()
到 numpy 以便它可以直接访问或复制数据而无需所有 Python 开销?
你会想要定义__array_interface__() instead http://docs.scipy.org/doc/numpy/reference/arrays.interface.html?highlight=__array_interface__#__array_interface__。这将让您直接传回指针和形状信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)