के साथ C++ फ़ंक्शन में पाइथन सरणी पास करना मैंने पायथन में एक अच्छा कोड लिखा है और यह बहुत अच्छा काम करता है। लेकिन अब मैं उन समस्याओं का आकार बढ़ा रहा हूं जिनकी मैं विश्लेषण कर रहा हूं और पायथन भयभीत रूप से धीमा है। पायथन कोड का धीमा हिस्साSWIG
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])
एच और डब्ल्यू के साथ 1024 के बराबर समारोह में उत्साह के लिए लगभग 5 मिनट लगते हैं। मैंने एक साधारण सी ++ प्रोग्राम/फ़ंक्शन लिखा है जो समान गणना करता है और यह उसी डेटा आकार के साथ एक सेकंड से भी कम समय में उत्साहित होता है।
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;
}
मेरे पास 2 डी सरणी पर प्रदर्शन करने के लिए कुछ अन्य विधियां हैं। सूचीबद्ध एक सरल उदाहरण है।
मैं जो करना चाहता हूं वह मेरे सी ++ फ़ंक्शन में एक पायथन 2 डी सरणी पास करता है और 2 डी सरणी को वापस अजगर पर वापस कर देता है।
मैंने स्विग के बारे में कुछ पढ़ा है, और गंभीर प्रश्नों को तोड़ दिया है, और ऐसा लगता है कि यह एक संभावित समाधान है। लेकिन मुझे लगता है कि मुझे वास्तव में क्या करने की ज़रूरत नहीं है।
क्या मुझे कोई मदद मिल सकती है? धन्यवाद
मैं शुरुआत करते हैं, पाइथन पहले। देखें: http://docs.python.org/extending/ – Santa