簡體   English   中英

Numpy C API-使用PyArray_Descr進行數組創建會導致段錯誤

[英]Numpy C API - Using PyArray_Descr for array creation causes segfaults

我正在嘗試使用Numpy C API在C ++中創建一個包裝在實用程序類中的Numpy數組。 大多數事情都按預期工作,但是每當我嘗試使用采用PyArray_Descr*的函數之一創建數組時,程序都會立即出現段錯誤。 設置要創建的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會。

編輯此頁面列出了不同類型的ScalarArray PyTypeObject實例。 添加線

descr->typeobj = &PyUShortArrType_Type;

尚未解決問題。

嘗試使用

descr = PyArray_DescrFromType(NPY_UINT16);

我只是最近才針對numpy C-API編寫程序,但是從我收集的數據來看,PyArray_Descr基本上是python-land的dtype。 您應該自己構建這些文件,並盡可能使用FromType宏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM