1
我正在嘗試使用Numpy C API在C++中創建Numpy數組,並將其封裝在實用程序類中。大多數事情都按預期工作,但每當我嘗試使用其中一個函數創建一個數組時,程序立即發生段錯誤。創建PyArray_Descr
的正確方法是什麼?Numpy C API - 使用PyArray_Descr進行數組創建會導致段錯誤
這是不工作的代碼的示例:
PyMODINIT_FUNC
PyInit_pysgm()
{
import_array();
return PyModule_Create(&pysgmmodule);
}
// ....
static PyAry zerosLike(PyAry const& array)
{
PyArray_Descr* descr = new PyArray_Descr;
Py_INCREF(descr); // creation function steals a reference
descr->type = 'H';
descr->type_num = NPY_UINT16;
descr->kind = 'u';
descr->byteorder = '=';
descr->alignment = alignof(std::uint16_t);
descr->elsize = sizeof(std::uint16_t);
std::vector<npy_intp> shape {array.shape().begin(), array.shape().end()};
// code segfaults after this line before entering PyAry constructor
return PyAry(PyArray_Zeros(shape.size(), shape.data(), descr, 0));
}
(測試用UINT16)。
我沒有設置typeobj
字段,這可能是唯一的問題,但我無法確定PyTypeObject
類型的合適值是什麼。
編輯:This page列出了不同類型的ScalarArray PyTypeObject實例。添加線
descr->typeobj = &PyUShortArrType_Type;
尚未解決問題。
哎呦 - 我的意思是回到這個 - 你是對的,這是我找到的答案。 – Qualia