【问题标题】:creating numpy array in c extension segfaults在 C 扩展段错误中创建 numpy 数组
【发布时间】:2014-10-19 03:09:44
【问题描述】:

我只是想在开始编写扩展程序之前创建一个 numpy 数组。这是一个超级简单的程序:

#include <stdio.h>
#include <iostream>
#include "Python.h"
#include "numpy/npy_common.h"
#include "numpy/ndarrayobject.h"
#include "numpy/arrayobject.h"

int main(int argc, char * argv[])
{
    int n = 2;
    int nd = 1;
    npy_intp size = {1};
    PyObject* alpha = PyArray_SimpleNew(nd, &size, NPY_DOUBLE);
    return 0;
}

这个程序在PyArray_SimpleNew 调用中出现段错误,我不明白为什么。我正在尝试关注之前的一些问题(例如numpy array C apiC array to PyArray)。我做错了什么?

【问题讨论】:

    标签: python c numpy python-extensions


    【解决方案1】:

    PyArray_SimpleNew 的典型用法例如

    int nd = 2;
    npy_intp dims[] = {3,2};
    PyObject *alpha = PyArray_SimpleNew(nd, dims, NPY_DOUBLE);
    

    注意nd的值不能超过数组dims[]的元素个数。

    ALSO: 扩展 must call import_array() 用于设置 C API 的函数指针表。例如。在赛通:

    import numpy as np
    cimport numpy as np
    
    np.import_array()  # so numpy's C API won't segfault
    
    cdef make_array():
      cdef np.npy_intp element_count = 100
      return np.PyArray_SimpleNew(1, &element_count, np.NPY_DOUBLE)
    

    【讨论】:

    • 对...我试图创建一个一维数组。无论如何,使用您的代码,我仍然会遇到段错误。
    • 是的,很抱歉。段错误似乎与对import_array() 的必需调用有关。我从未尝试从main 拨打PyArray_SimpleNew,所以我不知道如何解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多