我正在使用 scipy 的 weave.inline 来执行计算量大的任务。我在将一维数组返回到 python 范围时遇到问题。Weave.inline 使用一个名为“return_val”的特殊参数来将值返回到 python 范围。以下返回整数值的示例效果很好:
>>> from scipy.weave import inline
>>> print inline(r'''int N = 10; return_val = N;''')
10
但是,以下示例确实可以在不提示错误的情况下进行编译,但不会返回我期望的数组:
>>> from scipy.weave import inline
>>> code =\
r'''
int* pairs;
int lenght = 0;
for (int i=0;i<N;i++){
lenght += 1;
pairs = (int *)malloc(sizeof(int)*lenght);
pairs[i] = i;
std::cout << pairs[i] << std::endl;
}
return_val = pairs;
'''
>>> N = 5
>>> R = inline(code,['N'])
>>> print "RETURN_VAL:",R
0
1
2
3
4
RETURN_VAL: 1
我需要动态重新分配数组“对”的大小,这就是为什么我不能传递 numpy.array 或 python 列表本身。