如何在不复制的情况下将 datetime64[ns] 数组传递给 pybind11
How to pass array of datetime64[ns] to pybind11 without copying
我正在尝试使用 pybind11 将 datetime64[ns]
的数组传递给 C++。对于整数或浮点值数组,可以简单地使用包装器 py::array_t<int64_t or double>
.
pybind11 中是否有用于 C++ 端 datetime64[ns]
的专用类型,以便我可以捕获为 py::array_t<DateTime>
?
作为一个次优的解决方案,如果我可以改为传递一个 datetime64[ns]
数组的底层存储,这将是一个很大的改进,该数组预计将存储为一个 int64 数组。有什么简单的方法(即没有副本)将其作为 int64 数组传递吗?
这不是最符合人体工程学的,但您可以使用 py::array_t<int64_t>
作为 pybind11 接口的类型,并像这样转换数组(不复制):
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。
我正在尝试使用 pybind11 将 datetime64[ns]
的数组传递给 C++。对于整数或浮点值数组,可以简单地使用包装器 py::array_t<int64_t or double>
.
pybind11 中是否有用于 C++ 端 datetime64[ns]
的专用类型,以便我可以捕获为 py::array_t<DateTime>
?
作为一个次优的解决方案,如果我可以改为传递一个 datetime64[ns]
数组的底层存储,这将是一个很大的改进,该数组预计将存储为一个 int64 数组。有什么简单的方法(即没有副本)将其作为 int64 数组传递吗?
这不是最符合人体工程学的,但您可以使用 py::array_t<int64_t>
作为 pybind11 接口的类型,并像这样转换数组(不复制):
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。