Передача массива Python в функцию c ++ с помощью SWIG

Я написал неплохой фрагмент кода на Python, и он отлично работает. Но теперь я увеличиваю размер проблем, которые я анализирую, а python ужасно медленный. Медленная часть кода python -

    for i in range(0,H,1):
       x1 = i - length
       x2 = i + length
       for j in range(0,W,1):
          #print i, ',', j    # check the limits
          y1 = j - length
          y2 = j + length
          IntRed[i,j] = np.mean(RawRed[x1:x2,y1:y2])

. Если H и W равны 1024, выполнение функции занимает около 5 минут. Я написал простую программу / функцию на C ++, которая выполняет те же вычисления и выполняется менее чем за секунду с тем же размером данных.

   double summ = 0;
   double total_num = 0;
   double tmp_num = 0 ;
   int avesize = 2;
   for( i = 0+avesize; i <X-avesize ;i++)
     for(j = 0+avesize;j<Y-avesize;j++)
       {
         // loop through sub region of the matrix
         // if the value is not zero add it to the sum
         // and increment the counter. 
         for( int ii = -2; ii < 2; ii ++)
           {
             int iii = i + ii;
             for( int jj = -2; jj < 2 ; jj ++ )
               {
                 int jjj = j + jj; 
                 tmp_num = gsl_matrix_get(m,iii,jjj); 
                 if(tmp_num != 0 )
                   {
                     summ = summ + tmp_num;
                     total_num++;
                   }


               }
           }
         gsl_matrix_set(Matrix_mean,i,j,summ/total_num);
         summ = 0;
         total_num = 0;

       }

У меня есть другие методы для работы с 2D-массивом. Один из перечисленных - это простые примеры.

Что я хочу сделать, так это передать 2D-массив python моей функции c ++ и вернуть 2D-массив обратно в python.

Я немного читал о swig и задавал предыдущие вопросы, и похоже, что это возможное решение. Но я не могу понять, что мне на самом деле нужно делать.

Могу я получить помощь? Спасибо

7
задан JMD 9 March 2011 в 19:22
поделиться