我正在使用 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 .这将使您可以直接传回指针和形状信息。
关于c++ - C/C++ vector 到 Numpy 数组的快速转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424324/