求教Python中写Numpy C扩展比较简单的库
如题,我有个需求是对Numpy二维矩阵逐像素做一些处理,目前是在python中遍历的,但是比较慢,打算写个C/C++扩展来做这件事情。稍微查了一下,似乎python的C扩展有好几个库,包括Cython,cffi,ctypes等。我对C和Python都算比较熟,C++会一点。想请教一下坛友,考虑接口简单和可调试性强,应该用哪个库比较合适,访问Numpy的数据结构比较简单。还有就是我目前是在windows下开发,numpy直接用的pip,这种情况是不是还需要装numpy的头文件,会不会linux下处理比较简单。建议先试试numba
零成本的jit优化,对多层循环有奇效
,搂草打兔子,万一成了就不亏
手撕寿司 发表于 2021-1-11 11:11
建议先试试numba
零成本的jit优化,对多层循环有奇效
啊 这。。。直接跳到jit嘛,我先试试,但是毕竟不是自己写,心里没底啊
cython更简单,不过你这是要和numpy连用,建议先查查numpy的开发手册。 我看数码区学习py的气氛热火朝天啊…… patchper 发表于 2021-1-11 12:02
cython更简单,不过你这是要和numpy连用,建议先查查numpy的开发手册。
嗯嗯,就是担心访问numpy这方面。cython在windows下似乎必须msvc编译器,不知道numpy会不会有C库版本之类的问题 nexus1 发表于 2021-1-11 12:25
我看数码区学习py的气氛热火朝天啊……
啊哈哈哈应该感谢Python侠嘛 maritimus 发表于 2021-1-11 11:26
啊 这。。。直接跳到jit嘛,我先试试,但是毕竟不是自己写,心里没底啊
...
实测了一把 numba不支持的numpy函数有点太多,就算是支持的似乎也有些坑,不是很实用
Numba不支持的
看到标题我第一反应是python侠居然进化得这么快了 尽量利用广播机制,不要用for循环,就能快很多了,试试看能不能改进代码。 绝大部分情况下还是转换为矩阵运算效率更高,考虑下 opencv,考虑下卷积 考虑了矩阵运算,确实不行。OpenCV我也很熟,之前拿C++写过类似的功能
最后还是用的cffi,更自由一点 推荐两份资料
http://people.duke.edu/~ccc14/sta-663-2016/18F_Optimization_Bakeoff.html
https://numpy.org/doc/stable/user/c-info.python-as-glue.html 确实推荐numba,如果自己写c随便写然后ffi调用就是了,和luajit的ffi一样 先试试Cython 不能尝试用np直接把python的for循环的部分去掉么
去掉之后速度肯定就快了
页:
[1]