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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arrays können wie es hier beschrieben wird: Doc - 5.4.5-Arrays, die
carray.i
oderstd_vector.i
SCHLUCK aus der Bibliothek.Ich finde es einfacher zu arbeiten mit std::vector aus der SCHLUCK-Bibliothek
std_vector.i
senden Sie eine python-Liste, um eine C++ - SCHLUCK-Erweiterung. Obwohl in Ihrem Fall, wo der Optimierung ankommt, kann es nicht die optimale.In Ihrem Fall können Sie festlegen:
test.ich
test.h
test.cpp
Wenn Sie führen Sie den folgenden python-code den ich verwendet python 2.6.5), kann man sehen, dass die C++ - Funktion kann den Zugriff auf die python-Liste: