我正在爲我編寫的科學C庫創建python包裝。該庫包含雙打的恆定數組在編譯時全局定義,即使用SWIG的模塊級numpy陣列
const double arr[NARR] = { 200.0, 201.0, ... 899.0, 900.0 };
我想用SWIG使這個模塊級numpy的陣列在我的Python模塊,即
>>> 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模塊中。
任何人都可以告訴我如何讓這個工作正常嗎?
EDIT
用於包裹所述陣列改變的代碼示例手動基於從seberg的建議。
不知道如何與痛飲(也許最簡單的辦法就是,返回它的功能),但改變陣列'data'結構成員相當做到這一點肯定是錯的。有'PyArray_SimpleFromData'或者這樣的... – seberg
感謝您的提示!我已更正了示例以反映您的建議。如果必須手動包裝數組,我一定會使用這個函數。 – SethMMorton
當你低調時,解釋爲什麼OP可以改善問題是有幫助的。 – SethMMorton