2010-04-20 3 views
4

Я использую SWIG передать Numpy массивы из Python в C++ код:Несколько Numpy массивы с SWIG

%include "numpy.i" 
%init %{ 
import_array(); 
%} 

%apply (float* INPLACE_ARRAY1, int DIM1) {(float* data, int n)}; 

class Class 
{ 
    public: 
    void test(float* data, int n) 
    { 
    //... 
    } 
}; 

и в Python:

c = Class() 
a = zeros(5) 
c.test(a) 

Это работает, но как я могу передать несколько NumPy массивы к одной и той же функции?

ответ

9

Я узнал ответ от моего коллеги:

%apply (float* INPLACE_ARRAY1, int DIM1) {(float* data1, int n1), (float* data2, int n2)}; 

class Class 
{ 
    public: 
    void test(float* data1, int n1, float* data2, int n2) 
    { 
    //... 
    } 
}; 

Теперь два Numpy массивов передаются в класс :: тест.

+2

можно укоротить применить директиву немного, применяя TypeMap для обоих входных пар одновременно: % применяются (поплавок * INPLACE_ARRAY1, внутр dim1) {(флоат * data1, внутр n1), (поплавок * data2, int n2)}; – Martin

+0

Спасибо за подсказку! Я отредактировал ответ – Petter

Смежные вопросы