1. 小试牛刀
大名鼎鼎的Pandas是数据分析的神器。有时候我们需要对上千万甚至上亿的数据进行非常复杂处理,那么运行效率就是一个不能忽视的问题。比如下面这个简单例子,我们随机生成100万条数据,对这一列进行处理:如果是偶数则减1,奇数则加1。实际的数据分析工作要比这个例子复杂的多,但考虑到我们没有那么多时间等待运行结果,所以就偷个懒吧。可以看到函数的平均运行时间是284ms:
2. 用Cython编写C扩展
试试用我们的老朋友Cython来写一下这个函数。平均运行时间降低到了202ms,果然速度变快了。性能大约提升了1.4倍,离40倍的flag还差的好远。
3. 减少类型转换
为了减少C和Python之间的类型转换,我们直接把这一列作为Numpy数组传递给Cython函数,注意区分和。平均运行时间直接降到10.8毫秒,性能大约提升了26倍,仿佛看到了一丝希望。
4. 使用不安全的数组
利用,装饰器关闭数组的边界检查和负下标处理,平均运行时间变为5.9毫秒。性能提升了42倍左右,顺利完成任务。
作者:李小文,先后从事过数据分析、数据挖掘工作,主要开发语言是Python,现任一家小型互联网公司的算法工程师。
Github: https://github.com/tushushu
领取专属 10元无门槛券
私享最新 技术干货