我正在为我编写的科学 C 库创建一个 python 包装器。该库包含一个在编译时全局定义的常量数组,即
const double arr[NARR] = { 200.0, 201.0, ... 899.0, 900.0 };
我想在我的 python 模块中使用 SWIG 使其成为模块级 numpy 数组,即
>>> import foo
>>> foo.arr
array([200.0, 201.0, ..., 889.9, 900.0])
我似乎无法在文档中找到任何内容来使用常量数组执行此操作。一切似乎都处理从函数返回 numpy 数组,或定义非数组常量。
我知道如何通过手动包装数组来做到这一点:
npy_intp dim[1] = { NARR };
PyObject *a = PyArray_SimpleNewFromData(1, dim, NPY_DOUBLE, arr);
PyObject_SetAttrString(module, "arr", a);
我只是无法让它与 SWIG 一起工作。当我尝试将上述代码放入 foo.i 文件的 init 块中时,“arr”变量不会出现在 foo 模块中。
谁能告诉我如何让它正常工作?
编辑
根据 seberg 的建议,更改了手动包装数组的代码示例。