Python/SWIG:按索引返回数组
我试图从使用python的SWIG封装的C++函数输出一组值。我知道如何使用以下类型C++返回一个C++数组的简单例子:Python/SWIG:按索引返回数组,python,c++,return-value,swig,Python,C++,Return Value,Swig,我试图从使用python的SWIG封装的C++函数输出一组值。我知道如何使用以下类型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+
%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];
}
但是,我想更进一步,使用索引将数组返回到多维数组中。所以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];
}
但这似乎不起作用。我还知道在这种情况下返回的数组的大小将是6倍,但我不确定如何将该信息传递给SWIG。您应该能够应用与以前相同的类型映射:
%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* output_array, int length)};
这将匹配MyClass::retrieveArray
的参数double*output\u array
和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])};
另请参见,我假设您正在使用
void MyClass::retrieveArray(double output_array[6], int index) {...}
%apply (double ARGOUT_ARRAY1[6]) {(double output_array[6])};