gpt4 book ai didi

python - 从 scipy 的 weave.inline 将 C 数组返回到 python 范围

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:54 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com