我正在尝试传递 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/