【发布时间】:2011-03-09 19:22:46
【问题描述】:
我用 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;
}
我还有一些其他方法可以在二维数组上执行。列出的只是一个简单的例子。
我想要做的是将一个 python 二维数组传递给我的 c++ 函数并将一个二维数组返回给 python。
我读过一些关于 swig 的文章,并且已经找到了一些以前的问题,这似乎是一个可能的解决方案。但我似乎无法弄清楚我真正需要做什么。
我能得到任何帮助吗?谢谢
【问题讨论】:
-
我将首先介绍扩展 Python 的基础知识。见:docs.python.org/extending
标签: c++ python multidimensional-array swig