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

2012-04-23 23:56:59 +08:00
 Hualin
今天对本论坛来说是重要的一天,我会一如既往的发这中水贴然后没人理没人谢,直到我破产,哼。

最近在写一个 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的好处啊,都没用上,你们说,我上段说的那种理想情况有机会实现没?
3769 次点击
所在节点    Python
7 条回复
Hualin
2012-04-23 23:59:44 +08:00
no mention of Matplotlib, 慢。这个模块已经在matlab上实现并发论文了,现在只是在尝试新的东西。
thedevil7
2012-04-24 00:07:39 +08:00
为了不让你破产, 我来水一下.
phuslu
2012-04-24 00:09:09 +08:00
为numpy写c扩展的话,推荐使用cython,很多实验室也在用。
Hualin
2012-04-24 00:34:55 +08:00
@phuslu @thedevil7

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

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

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

http://dsnra.jpl.nasa.gov/software/Python/numpydoc/numpy-13.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/33236

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX