众所周知,python以简单闻名,以速度慢而臭名,而其慢的原因,无非就是以下3中:
1.GIL
2.解释型语言
3.动态类型
1.GIL是python的一个全局锁,使得python解释器每次只能运行一个线程的字节码,限制了运用多线程的能力(仅限于Cython);
2.解释性语言没什么好说的,边解释边执行,运行速度肯定小于编译后在运行的语言;
3.由于python不用声明变量类型,有动态类型的机制,动态类型导致开销巨大,导致其速度慢。
本文就带领大家做个实验,分析使用原生python和python调用C/C++的运行时间对比分析,分析的例子是计算矩阵按行的平均值,数据的本质也就是
矩阵嘛,看看是否像大家所说的python有那么慢。
-
原生python方式,文件命名为row_mean_py.py
import numpy as np def row_mean_py(A): out = np.zeros(A.shape[0]) for i in range(A.shape[0]): for j in range(A.shape[1]): out[i] = out[i] + A[i,j] / A.shape[1] return out def row_mean_py_raw(A): return np.max(A,axis=1)
其中函数row_mean_py是使用python自定义方式计算矩阵按行的平均值,row_mean_py_raw是使用python向量化方法计算。让我们来看一下运行时间对比。
文件命名为row_mean_main.py
imp