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 · 3781 次点击
    这是一个创建于 4593 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天对本论坛来说是重要的一天,我会一如既往的发这中水贴然后没人理没人谢,直到我破产,哼。

    最近在写一个 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   ·   实用小工具   ·   3338 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:21 · PVG 19:21 · LAX 03:21 · JFK 06:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.