私が書いた科学的な C ライブラリの python ラッパーを作成しています。ライブラリには、コンパイル時にグローバルに定義される double の定数配列が含まれています。
const double arr[NARR] = { 200.0, 201.0, ... 899.0, 900.0 };
SWIG を使用して、これを Python モジュールのモジュール レベルの 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 からの提案に基づいて、配列を手動でラップするためのコード例を変更しました。