numpy - 如何将 datetime64[ns] 数组传递给 pybind11 而不复制

标签 numpy pybind11

我正在尝试传递 datetime64[ns] 的数组使用 pybind11 转换为 C++。对于整数或浮点值数组,可以简单地使用包装器 py::array_t<int64_t or double> .

pybind11 中是否有 datetime64[ns] 的专用类型在 C++ 端,以便我可以捕获为 py::array_t<DateTime>

作为次优解决方案,如果我可以传递 datetime64[ns] 的底层存储,那已经是一个很大的改进了。 array 预计存储为 int64 数组。是否有任何简单的方法(即,没有复制)将其作为 int64 数组传递?

最佳答案

这不是最符合人体工程学的,但您可能可以使用 py::array_t<int64_t>作为 pybind11 接口(interface)的类型,并像这样转换数组(不复制):

In [1]: a = np.array([np.datetime64(x, 'ns') for x in range(10)])

In [2]: v = a.view(dtype=np.int64)

In [3]: v
Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)

In [4]: some_pybind_method(v)

There's a way编写一个自定义类型转换来透明地执行此操作,但我不熟悉所需的 Python C-API。

关于numpy - 如何将 datetime64[ns] 数组传递给 pybind11 而不复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69393194/

相关文章:

arrays - 如何在 Python3 中解码编码文字/字符串的 numpy 数组?属性错误 : 'numpy.ndarray' object has no attribute 'decode'

python - 在 Python 中对多行数组的各个部分进行平均

python - 仅累积一列的 numpy 数组

pybind11 - 用于 STL-vector-like 类的健壮类型脚轮

python - 如何从 Python 获取 OpenCV 图像并在 pybind11 中的 C++ 中使用它?

c++ - 不确定使用函数宏作为 C++ 程序入口点的概念,

python - 构造多个向量之间的成对距离矩阵的有效方法?

python - numpy matrix trickery - 逆时矩阵之和

c++ - 在用户类中包含 pybind11 嵌入式模块的正确方法是什么(作为单例类的一部分)

python - 使用 Python 虚拟环境时,include 和 libs 在哪里?