gpt4 book ai didi

python - Numpy C API - 使用 PyArray_Descr 进行数组创建会导致段错误

转载 作者:行者123 更新时间:2023-11-30 02:26:20 27 4
gpt4 key购买 nike

我正在尝试使用 Numpy C API 在 C++ 中创建 Numpy 数组,封装在实用程序类中。大多数事情都按预期工作,但每当我尝试使用采用 PyArray_Descr* 的函数之一创建数组时,程序会立即出现段错误。为创 build 置 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;

没有解决问题。

最佳答案

尝试使用

descr = PyArray_DescrFromType(NPY_UINT16);

我最近才针对 numpy C-API 编写代码,但据我所知,PyArray_Descr 基本上是来自 python 领域的 dtype。您应该自己构建这些并在可能的情况下使用 FromType 宏。

关于python - Numpy C API - 使用 PyArray_Descr 进行数组创建会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com