我正在使用 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 列表本身的原因。
最佳答案
您需要做的就是使用原始 python c-api calls ,或者如果您正在寻找更方便的东西,内置的 scipy 编织包装器。
没有关于泄漏或效率的保证,但它应该看起来有点像这样:
from scipy.weave import inline
code = r'''
py::list ret;
for(int i = 0; i < N; i++) {
py::list item;
for(int j = 0; j < i; j++) {
item.append(j);
}
ret.append(item);
}
return_val = ret;
'''
N = 5
R = inline(code,['N'])
print R
关于python - 从 scipy 的 weave.inline 将 C 数组返回到 python 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391553/