如何创建一个使用C API datetime64对象的数组numpy的吗?(How to creat

2019-09-27 05:36发布

我需要创建numpy的datetime64对象的从C / C ++代码的阵列。 正如你可以看到NPY_LONGLONGNPY_VOID我做到了。 我需要做同样的事情NPY_DATETIME类型。

PyObject *arr1 = PyArray_SimpleNew(1, &dims, NPY_LONGLONG);
PyObject *arr2 = PyArray_New(&PyArray_Type, 1, &dims, NPY_VOID, NULL, NULL, item_size, 0, NULL);

问题是,有没有什么是内部表示文档NPY_DATETIME类型,所以我不知道它是否有一个固定的大小,结构还是不行。

如果你把一个例子,像我一样为这将是巨大NPY_LONGLONGNPY_VOID

Answer 1:

我发现了一个很好的解决方案。 这里是我的函数创建了一个从C缓冲区numpy的阵列。

PyObject* create_datetime_array(int index, std::string const &dtype)
{
    int buffer_size = this->elements_count*sizeof(omd::OT_int64);
    npy_intp dims = this->elements_count;
    PyObject *date_type = Py_BuildValue("s", dtype.c_str());
    PyArray_Descr *descr;
    PyArray_DescrConverter(date_type, &descr);
    Py_XDECREF(date_type);
    PyObject *arr = PyArray_SimpleNewFromDescr(1, &dims, descr);
    memcpy(PyArray_BYTES((PyArrayObject *)arr), &(this->int64_data[index][0]), buffer_size);
    return arr;
}

dtype是M8 [毫秒]或M8 [美]或M8 [NS]。



文章来源: How to create of Numpy array of datetime64 objects using C API?