比较入门的问题:摸打滚爬折腾python的C扩展 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hualin
V2EX    Python

比较入门的问题:摸打滚爬折腾python的C扩展

  •  
  •   Hualin 2012-04-23 23:56:59 +08:00 4340 次点击
    这是一个创建于 4969 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天对本论坛来说是重要的一天,我会一如既往的发这中水贴然后没人理没人谢,直到我破产,哼。

    最近在写一个 python调用C的程序,思路如下:

    python numpy, scipy 实现算法,搭建实验平台;
    C, opengl实现绘图,将算法中的很大的矩阵显示出来,先粗粗画出来,然后再在关注细节问题和设计问题。

    好了,我似乎可能差不多看懂了如何写C扩展,什么wrapper函数,method table。Ok, 理想情况下是这样滴:

    C模块和python共享一个numpy.matrix对象。在python中算好,调用C,就能根据这个矩阵画出图来。因为,,,这个矩阵实在太大咯,本身就是高维矩阵,用python算法好不容易降维了,有算了其他一堆堆东西,好了小本本已经受不了了。

    可是我看wrapper函数在例子里传的都是内置的数据类型,能传矩阵进去啊?等一下,幻觉了,C里面哪有numpy.matrix?肯定不行,是不是得把它变成list类型,然后传?好吧,又得double内存咯,传不传的进啊?是指针还是copy?好吧,现在triple咯,原来鄙视用python输出文件,再让C读,觉得这不是真正的hybrid代码,什么python的好处啊,都没用上,你们说,我上段说的那种理想情况有机会实现没?
    7 条回复    1970-01-01 08:00:00 +08:00
    Hualin
        1
    Hualin  
    OP
       2012-04-23 23:59:44 +08:00   1
    no mention of Matplotlib, 慢。这个模块已经在matlab上实现并发论文了,现在只是在尝试新的东西。
    thedevil7
        2
    thedevil7  
       2012-04-24 00:07:39 +08:00
    为了不让你破产, 我来水一下.
    phuslu
        3
    phuslu  
       2012-04-24 00:09:09 +08:00   1
    为numpy写c扩展的话,推荐使用cython,很多实验室也在用。
    Hualin
        4
    Hualin  
    OP
       2012-04-24 00:34:55 +08:00
    @phuslu @thedevil7

    看了下cython,似乎很性感,cool。多谢。
    哎,我这人接受东西慢,老怕新东西加进去会让代码一团糟,莫非这是洁癖。
    thedevil7
        5
    thedevil7  
       2012-04-24 07:18:31 +08:00
    @Hualin 强烈推荐使用git管理代码~~~乱了也不怕~~
    EricZ
        6
    EricZ  
       2012-04-24 07:34:47 +08:00   1
    我也做过类似的,使用C模块帮助 Python 程序算矩阵。不过当时我要算的只是二维的矩阵。

    用Cmodule。传的是指针,所以应该不会 double memory。Python.h 里面的函数可以帮助你的 C 模块 access Python 的 objects,比如说 list。如果要在 C 里面重新弄一个矩阵有点太浪费资源了。

    我就是看这个的:http://docs.python.org/extending/extending.html
    Hualin
        7
    Hualin  
    OP
       2012-04-26 18:01:44 +08:00
    @EricZ 多谢,矩阵主要是在numpy 里面,numpy的array有个c接口,哇好帅啊

    http://dsnra.jpl.nasa.gov/software/Python/numpydoc/numpy-13.html
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     850 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 19:29 PVG 03:29 LAX 11:29 JFK 14:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86