Python 板


LINE

最近开始用python进行一些数据分析... 想跟各位分享一下 使用Scipy + Numpy 将 C语言整合至python的心得: python在某些情况下的速度实在是让人无法忍受 (ex. 对大型List做两三层回圈以上的数学运算) 为了增强python在这方面的功能 有两个好用的module: SciPy & Numpy numpy 基本上是使用自订的 "array" 相较於python list, numpy array里的元素资料型态是一致的 所以在记忆体的使用上有较高效率 而且内建的 "universal function" (ufunc)功能 可以一次对整个numpy array做简单的数学函数运算 可惜如果运算稍微复杂一点时, numpy 提供的 frompython (将自订函数转成universal function) 相较於使用python本身去写并没有快多少 速度上还是不如C语言 这个时候Scipy就可以出场了... Scipy本身的功能也相当强大,比如说scipy.matplotlib用来绘图就蛮方便的 其中的scipy.weave更提供了直接在python 里面使用C语言(and C++)的功能: 举例来说, hello world: from scipy import weave code="""printf("Hello World! \\n");""" weave.inline(code) 当然, 这看起来像脱裤子放屁 XD 不过如果有一个或好几个很长的numpy array, 就可以用weave.blitz 结合weave.inline 直接传到在python里面写的C code里 举例: import numpy as np from scipy import weave a=np.arange(0,1000,dtype=float).reshape(500,2) #产生((0,1),(2,3),(4,5)...(998,999))的500*2矩阵,并指定资料型态为float code=""" float k=0.0; for(int i=0;i<500;i++) { k+=a(i,0)+a(i,1); //直接在code里面使用刚刚产生的矩阵 } return Py_BuildValue("d", k); //传回一个float给python """ print weave.inline(code, ['a'], type_converters=weave.converters.blitz, compiler='gcc') 就会出现从0 加到 999的值罗 如果要传回python list, 可以在C code里宣告 ex. PyObject *m = PyList_New(0); 对这个list 可以像在python 里面一样操作, 如: PyList_Append(m, PyFloat_FromDouble(k)); 因为是在C语言里面,所以资料型态要指定好 关於如何增加python的效率, 有兴趣的人可以看看这边 http://www.scipy.org/PerformancePython 个人是觉得简单但是大量的运算 用weave.inline 搭配 numpy, weave.blitz是相当方便的组合 cython or SWIG速度比inline快上一点, 但是使用上稍微复杂一些(对我来说 XD) 如果是使用windows的话 python(x,y)装了就可以直接用scipy.weave & numpy了 用linux的话就是手动装scipy & numpy, 要使用weave的话得多装python-dev 还有要更改这个 /usr/lib/python2.6/dist-packages/scipy/weave/blitz/blitz/blitz.h 在#include <stdio.h> 之前添加: #include <cstdlib> 以上抛砖引玉 希望有更多高手可以分享使用python 做科学研究的心得 ~OTZ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 129.170.26.186 ※ 编辑: painkiller 来自: 129.170.26.186 (04/09 08:20) ※ 编辑: painkiller 来自: 129.170.26.186 (04/09 08:21)
1F:→ juiz:Join us in http://conference.scipy.org/scipy2011/ 04/09 08:24
2F:推 pcedison:感谢分享 04/09 08:30
3F:推 curist:推推 04/09 18:09
4F:推 mjsg:感谢分享 04/09 20:04
5F:推 cobrasgo:如果是我的话,重点应该会放在那两三层的回圈有没有办法 04/10 15:49
6F:→ cobrasgo:改写逻辑 04/10 15:49
7F:→ painkiller:嗯...大概是我举得例不好 光是取sin值100万次的话 04/10 22:33
8F:→ painkiller:python就比weave慢个10倍左右 04/10 22:33
9F:推 guteres:请问有没有办法把code另外存成档案再去call它? 04/11 00:07
10F:→ painkiller:可能要用SWIG之类的套件喔... 那个我很不熟耶 :P 04/11 22:33
11F:推 guteres:soga 04/13 00:13
12F:推 cobrasgo:用c binding不就可以了? 04/13 00:52







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP