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/

相关文章:

python - 我在 python 中的 fft() 有问题

python - pybind11 以某种方式减慢了 c++ 函数

python - 如何强制库(pybind11)包含Python3中的<Python.h>?

boost-python - pybind11 相当于 boost::python::extract?

python - 将 CuPy CUDA 设备指针传递给 pybind11

python - 将numpy类型转换为python

python - 使用Python和Dask计算欧氏距离

python - 如何在Python中设置魔术方法的默认行为?

python - 有人可以解释 pybind11 安装吗?

python - 如果将最小的正浮点值乘以一个非零数,是否保证得到非零结果?