簡體   English   中英

Python / SWIG:按索引返回數組

[英]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_arrayMyClass::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])};

另請參閱numpy.i文檔 ,我認為您正在使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM