我需要创建numpy的datetime64对象的从C / C ++代码的阵列。 正如你可以看到NPY_LONGLONG
和NPY_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_LONGLONG
和NPY_VOID
。
我发现了一个很好的解决方案。 这里是我的函数创建了一个从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]。