Vorbei Python-array an c++ - Funktion mit SCHLUCK

Ich geschrieben habe, ein gutes Stück code in python und es funktioniert Super. Aber jetzt bin ich Skalierung wird die Größe der Probleme, die ich bin, zu analysieren und python ist schrecklich langsam. Der langsame Teil der python-code ist

    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])

Mit H und W gleich 1024 die Funktion dauert etwa 5 Minuten, um excute. Ich habe geschrieben ein einfaches c++ - Programm/die Funktion, die führt die gleiche Berechnung und es excutes in weniger als einer Sekunde mit der gleichen Größe der Daten.

   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;

       }

Habe ich einige andere Methoden, um auf das 2D-array. Die oben ist ein einfacher Beispiele.

Was ich tun will, ist das übergeben eines python-2D-array, um meine c++ - Funktion und liefert ein 2D-array wieder zu python.

Ich ein bisschen gelesen habe, über einen Schluck, und haben sereached durchlässig Fragen, und es scheint, wie es ist eine mögliche Lösung. Aber ich kann nicht scheinen, um herauszufinden, was ich eigentlich tun müssen.

Bekomme ich Hilfe? Dank

  • Ich würde damit beginnen durch Abdeckung der Grundlagen der Erweiterung von Python-ersten. Siehe: docs.python.org/extending
InformationsquelleAutor JMD | 2011-03-09
Schreibe einen Kommentar