ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-08-26 07:55:09  阅读:214  来源: 互联网

标签:python arrays scipy return


我使用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,arrays,scipy,return
来源: https://codeday.me/bug/20190826/1728060.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有