代码之家  ›  专栏  ›  技术社区  ›  Vebjorn Ljosa

如何从C创建numpy记录数组

  •  8
  • Vebjorn Ljosa  · 技术社区  · 16 年前

    在python方面,我可以创建新的numpy记录数组,如下所示:

    numpy.zeros((3,), dtype=[('a', 'i4'), ('b', 'U5')])
    

    如何在C程序中执行相同的操作?我想我得打个电话 PyArray_SimpleNewFromDescr(nd, dims, descr) ,但是如何构造 PyArray_Descr 这适合作为第三个论点传给 PyArray_SimpleNewFromDescr ?

    2 回复  |  直到 11 年前
        1
  •  10
  •   Community CDub    8 年前

    使用 PyArray_DescrConverter . 下面是一个例子:

    #include <Python.h>
    #include <stdio.h>
    #include <numpy/arrayobject.h>
    
    int main(int argc, char *argv[])
    {
         int dims[] = { 2, 3 };
         PyObject *op, *array;
         PyArray_Descr *descr;
    
         Py_Initialize();
         import_array();
         op = Py_BuildValue("[(s, s), (s, s)]", "a", "i4", "b", "U5");
         PyArray_DescrConverter(op, &descr);
         Py_DECREF(op);
         array = PyArray_SimpleNewFromDescr(2, dims, descr);
         PyObject_Print(array, stdout, 0);
         printf("\n");
         Py_DECREF(array);
         return 0;
    }
    

    多亏了 Adam Rosenfield 指向第13.3.10节 Guide to NumPy .

        2
  •  5
  •   Adam Rosenfield    11 年前

    Guide to NumPy ,第13.3.10节。有很多不同的方法来制作一个描述符,尽管它并没有写的那么简单 [('a', 'i4'), ('b', 'U5')] .