import pandas as pd from pandas import Series, DataFrame #matplotlib.rcdefaults() matplotlib.rc_file("matplotlibrc.bmh.txt") process_names=['Normal','Scaling','Gain','Stack','Moving avg','DFT','Matrix mult','Wave 1d'] process=pd.Index(process_names) python=Series([209,2660,5220,6110,22600,74000,139000,386000],index=process) numpy_=Series([0.678,6.0,17.7,6.34,2020,285,6.17,273],index=process) numba=Series([1.02,12.7,24.8,19.7,77.2,74000,329,381000],index=process) cython=Series([0.801,7.06,18.4,8.87,34.9,2820,334,517],index=process) fortran=Series([0.579,7.25,23.4,5.75,35.8,219,70.7,102],index=process) python names=['Python','Numpy','Numba','Cython','Fortran'] data=DataFrame([python,numpy_,numba,cython,fortran],index=names).T data figure(figsize=[8,6]) styles=['o-','+-','^-','s-','*-'] colors=matplotlib.rcParams['axes.color_cycle'] for col,style,color in zip(data,styles,colors): semilogy(data[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) ylabel('Calculation time (ms)',fontsize='large') gca().set_xticklabels(process_names,rotation=20,fontsize='large') grid(None,'both') legend(names,loc='upper left') savefig('time.tif') show() figure(figsize=[8,6]) for col,style,color in zip(data,styles,colors): semilogy(data.Python.values/data[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) ylabel('Speedup',fontsize='large') gca().set_xticklabels(process_names,rotation=20,fontsize='large') grid(None,'both') legend(names,loc='upper left') savefig('speedup.tif') show() line_py=array([10,6,9,6,12,10,7,17]) line_np=array([2,2,2,2,6,7,2,13]) line_nb=line_py+1 line_cy=array([11,7,12,7,14,13,8,18]) line_ft=array([6,6,11,10,16,16,6,21]) lines=DataFrame([line_py,line_np,line_nb,line_cy,line_ft],index=names,columns=process).T lines figure(figsize=[8,6]) for col,style,color in zip(lines,styles,colors): plot(lines[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) ylabel('Number of lines',fontsize='large') gca().set_xticklabels(process_names,rotation=20,fontsize='large') #grid(None,'both') legend(names,loc='upper left') savefig('lines.tif') show() from scipy.stats.mstats import gmean data arr=[] for col in data: arr.append(data.Python.values/data[col].values) gm=gmean(arr,axis=1) figure(figsize=[8,6]) plot(gm[1:],'o-') ylabel('Speedup (geometrical mean)',fontsize='large') gca().set_xticks(range(4)) gca().set_xticklabels(names[1:],fontsize='large') savefig('gmean.tif') show() # Gain by scale size_n=[100,1000,10000] sizes=pd.Index(size_n) # in ms python=Series([50.3,512,5060],index=sizes) numpy_=Series([0.112,2.41,17.4],index=sizes) numba=Series([0.192,2.4,23.1],index=sizes) cython=Series([0.100,1.81,18.1],index=sizes) fortran=Series([0.115,4.12,20.6],index=sizes) names=['Python','Numpy','Numba','Cython','Fortran'] gdata=DataFrame([python,numpy_,numba,cython,fortran],index=names).T gdata figure(figsize=[8,6]) styles=['o-','+-','^-','s-','*-'] colors=matplotlib.rcParams['axes.color_cycle'] for col,style,color in zip(names,styles,colors): loglog(sizes,gdata[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) xlabel('Number of samples',fontsize='large') ylabel('Calculation time (ms)',fontsize='large') legend(names,loc='upper left') savefig('scale_gain.tif') show() # DFT by scale size_n=[100,1000,10000] sizes=pd.Index(size_n) # in ms python=Series([784,7840,78000],index=sizes) numpy_=Series([9.38,33.7,285],index=sizes) numba=Series([786,7870,78000],index=sizes) cython=Series([29.3,284,2860],index=sizes) fortran=Series([2.24,21.2,216],index=sizes) names=['Python','Numpy','Numba','Cython','Fortran'] gdata=DataFrame([python,numpy_,numba,cython,fortran],index=names).T gdata figure(figsize=[8,6]) styles=['o-','+-','^-','s-','*-'] colors=matplotlib.rcParams['axes.color_cycle'] for col,style,color in zip(names,styles,colors): loglog(sizes,gdata[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) xlabel('Number of samples',fontsize='large') ylabel('Calculation time (ms)',fontsize='large') legend(names,loc='upper left') savefig('scale_dft.tif') show() # matmult by scale size_n=[5,50,500] sizes=pd.Index(size_n) # in ms python=Series([0.165,153,142000],index=sizes) numpy_=Series([0.00191,0.0119,6.08],index=sizes) numba=Series([0.00215,0.334,324],index=sizes) cython=Series([0.0031,0.311,333],index=sizes) fortran=Series([0.0031,0.105,68.6],index=sizes) names=['Python','Numpy','Numba','Cython','Fortran'] gdata=DataFrame([python,numpy_,numba,cython,fortran],index=names).T gdata #figure(figsize=[8,6]) #styles=['o-','+-','^-','s-','*-'] #colors=matplotlib.rcParams['axes.color_cycle'] #for col,style,color in zip(names,styles,colors): # loglog(sizes,gdata[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) #xlabel('Matrix dimension',fontsize='large') #ylabel('Calculation time (ms)',fontsize='large') #gca().set_xticks([5,50,500]) #gca().set_xticklabels(['5x5','50x50','500x500']) #xlim([5,500]) #legend(names,loc='upper left') #savefig('scale_matmul.tif') #show() # matmult by scale size_n=[10,100,1000] sizes=pd.Index(size_n) # in ms python=Series([1.48,1150,(19.*60+22)*1000],index=sizes) numpy_=Series([0.00191,0.061,48],index=sizes) numba=Series([0.00596,2.83,3790],index=sizes) cython=Series([0.00501,2.69,3410],index=sizes) fortran=Series([0.00405,0.7,609],index=sizes) names=['Python','Numpy','Numba','Cython','Fortran'] gdata=DataFrame([python,numpy_,numba,cython,fortran],index=names).T gdata figure(figsize=[8,6]) styles=['o-','+-','^-','s-','*-'] colors=matplotlib.rcParams['axes.color_cycle'] for col,style,color in zip(names,styles,colors): loglog(sizes,gdata[col].values,style,markersize=10,markerfacecolor='none',markeredgecolor=color,lw=1) xlabel('Matrix dimension',fontsize='large') ylabel('Calculation time (ms)',fontsize='large') gca().set_xticks([10,100,1000]) gca().set_xticklabels(['10x10','100x100','1000x1000']) #xlim([5,500]) legend(names,loc='upper left') savefig('scale_matmul.tif') show()