c++ - C/C++ vector 到 Numpy 数组的快速转换

标签 c++ python arrays numpy swig

我正在使用 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/

相关文章:

python - 如何使用 selenium webdriver python 中的跨度中的定位器打印文本?

javascript - 使用切片的数组复制不起作用

arrays - 在 bash 脚本中打印整个数组时如何避免在屏幕上打印分隔符

c++ - 动态分配大于SIZE_T/UINT的内存空间(即在堆上)

c++ - Debian 上的线程用完

c++ - 无法在 C++17 之前的模式下使用 static constexpr 进行编译

python - 将多个NetCDF文件组合成timeseries多维数组python

javascript - 对 Python 的 Ajax 调用

javascript - 使用本地存储中的数组

c++ - 带有 float 的 2D 点的莫顿指数