5

大きな配列で計算を行うためにnumpyのC拡張機能を作成しようとしていますが、「PyArray_SimpleNew」または「PyArray_FromDims」を使用してPyArrayObjectを取得すると大きな問題が発生します。これが私のコードです:

#include<stdio.h>
#include "Python.h"
#include"arrayobject.h"

static PyObject *MyExtGFV(PyObject *self, PyObject *args)
{
    npy_intp dims = 1;
    PyArray_SimpleNew(1, &dims, PyArray_FLOAT32);
    retuurn Py_BuildValue("i", 1);
}
static PyMethodDef my_ext_methods[] = 
{
    {"GFV", MyExtGFV, METH_VARARGS, "used to generate feature vectors"},
    {NULL, NULL}
}

PyMODINIT_FUNC initMyExt(void)
{
    Py_InitModule("MyExt", my_ext_methods);
}

それをデバッグするために、関数MyExtGFV()のコードのほとんどを削除しましたが、そのままにしておきます

PyArray_SimpleNew(1, &dims, PyArray_FLOAT32);   

その中にありますが、それをインポートしてPythonコードで使用すると、「pythonが動作を停止しました」と表示されます。私は長い間この問題をグーグルで検索してきましたが、他の誰も同じ問題を抱えていないようです、それはほとんど私を狂わせます、どんな助けもありがたいです!!!

4

1 に答える 1

6

わかりました。init 関数は次のように記述します。

PyMODINIT_FUNC initMyExt(void)
{
    Py_InitModule("MyExt", my_ext_methods);
    import_array();
}

"import_array();" numpyには必要です、ありがとうございます~~

于 2012-10-14T06:41:14.930 に答える