[英]Python/SWIG: Return Array by Index
我正在嘗試從使用SWIG for Python包裝的C ++函數輸出值數組。 我知道如何使用以下類型映射返回C ++數組的簡單情況:
%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* output_array, int length)};
關聯的C ++代碼如下所示:
void MyClass::retrieveArray(double* output_array, int length) {
for (int i=0; i<length; i++)
output_array[i] = _array[i];
}
Python的用法如下:
output_array = my_class_instance.returnArray(length)
但是,我想更進一步,將使用索引的數組返回到多維數組。 因此,C ++代碼如下所示:
void MyClass::retrieveArray(double* output_array, int length, int index) {
for (int i=0; i<length; i++)
output_array[i] = _multi_dimensional_array[index][i];
}
但是,將需要更改類型映射以容納索引。 我努力了:
%apply (double* ARGOUT_ARRAY1, int DIM1, int index) {(double* output_array,
int length, int index)};
但這似乎不起作用。 我也知道在這種情況下返回數組的大小將是6的兩倍,但是我不確定如何將該信息中繼到SWIG。
您應該能夠像以前一樣應用相同的類型映射:
%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* output_array, int length)};
這將匹配參數double* output_array
和MyClass::retrieveArray
int length
。 要從python調用函數,請使用:
output_array = my_class_instance.retrieveArray(length, index)
或者,因為您已經知道長度為6:
output_array = my_class_instance.retrieveArray(6, index)
如果您在編譯時已經知道數組的大小,也可以修改C ++代碼以使用以下函數簽名:
void MyClass::retrieveArray(double output_array[6], int index) {...}
然后使用其他類型映射:
%apply (double ARGOUT_ARRAY1[6]) {(double output_array[6])};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.