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

标签 python arrays return scipy

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

相关文章:

python - Django Queryset 使用 .extra 查询多对多关系

ios - UITableView 在每个单元格中显示数组中的最后一项

javascript - 从数组中获取正确元素的正确方法

assembly - 清理堆栈时可以将动态值(寄存器或内存)与 RET 一起使用吗?

c - 在C中返回-1?

python - 动态添加属性到 Django 模型

python - 如何在 django 基于类的 View 中注册后自动登录

python - 用于间接对象提取的 pyPdf

c - 有什么比这更好的将 4 个字节打包成 3 个字节的方法?

arrays - TCL:如何返回数组?