范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

CJuliaPythonNumba和Cython执行速度比较

  导入必备包 import numpy as np import pandas as pd import time from numpy.testing import * from scipy.linalg import *  import gc from matplotlib import pyplot as plt %matplotlib inline  from numba import jit, void, double         Python def det_by_lu(y, x):     y[0] = 1.      N = x.shape[0]     for k in range(N):         y[0] *= x[k,k]         for i in range(k+1, N):             x[i,k] /= x[k,k]             for j in range(k+1, N):                 x[i,j] -= x[i,k] * x[k,j]         def run_python(A,B,y,N):      # check that result is correct     np.copyto(B,A)     det_by_lu(y, B)      L = np.tril(B, -1) + np.eye(N)     U = np.triu(B)     assert_almost_equal( L.dot(U),  A)          gc.disable()     st = time.time()          loops = 1 + (100000 // (N*N))          for l in range(loops):         np.copyto(B,A)         det_by_lu(y, B)              et = time.time()     gc.enable()          return  (et - st)/loops        Numpy def numpy_det_by_lu(y, x):     y[0] = 1.      N = x.shape[0]     with np.errstate(invalid="ignore"):         for k in range(N):             y[0] *= x[k,k]             xk = x[k]             for i in range(k+1, N):                 xi = x[i]                 xi[k] /= xk[k]                 xi[k+1:] -= xi[k] * xk[k+1:]         def run_numpy(A,B,y,N):      # check that result is correct     np.copyto(B,A)     numpy_det_by_lu(y, B)      L = np.tril(B, -1) + np.eye(N)     U = np.triu(B)     assert_almost_equal( L.dot(U),  A)          gc.disable()     st = time.time()          loops = 1 + (100000 // (N*N))          for l in range(loops):         np.copyto(B,A)         numpy_det_by_lu(y, B)              et = time.time()     gc.enable()          return  (et - st)/loops        Numba def numba_det_by_lu(y, x):     y[0] = 1.      N = x.shape[0]     for k in range(N):         y[0] *= x[k,k]         for i in range(k+1, N):             x[i,k] /= x[k,k]             for j in range(k+1, N):                 x[i,j] -= x[i,k] * x[k,j]               fastdet_by_lu = jit(void(double[:], double[:,:]))(numba_det_by_lu)         def run_numba(A,B,y,N):      # check that result is correct     np.copyto(B,A)     fastdet_by_lu(y, B)      L = np.tril(B, -1) + np.eye(N)     U = np.triu(B)     assert_almost_equal( L.dot(U),  A)          gc.disable()     st = time.time()          loops = 1 + min(1000000 // (N*N), 20000)          for l in range(loops):         np.copyto(B,A)         fastdet_by_lu(y, B)              et = time.time()     gc.enable()          return  (et - st)/loops        Cython %load_ext cython         %%cython  import cython  @cython.boundscheck(False) @cython.wraparound(False) cpdef cython_det_by_lu(double[:] y, double[:,:] x):     y[0] = 1.      cdef int N = x.shape[0]     cdef int i,j,k          for k in range(N):         y[0] *= x[k,k]         for i in range(k+1, N):             x[i,k] /= x[k,k]             for j in range(k+1, N):                 x[i,j] -= x[i,k] * x[k,j]         def run_cython(A,B,y,N):      # check that result is correct     np.copyto(B,A)     cython_det_by_lu(y, B)      L = np.tril(B, -1) + np.eye(N)     U = np.triu(B)     assert_almost_equal( L.dot(U),  A)          gc.disable()     st = time.time()          loops = 1 + min(1000000 // (N*N), 20000)     for l in range(loops):         np.copyto(B,A)         cython_det_by_lu(y, B)              et = time.time()     gc.enable()          return  (et - st)/loops        C from cffi import FFI ffi = FFI() ffi.cdef("void det_by_lu(double *y, double *B, int N);") C = ffi.dlopen(r"C:UsersIBM_ADMINlu.dll") c_det_by_lu = C.det_by_lu         def run_c(A,B,y,N):     # run c code     #B = numpy.zeros((N,N), order="F")     #B[:,:] = A     np.copyto(B,A)     c_det_by_lu(ffi.cast("double *", y.ctypes.data),                 ffi.cast("double *", B.ctypes.data),                 ffi.cast("int", N))          # check that result is correct     L = np.tril(B, -1) + np.eye(N)     U = np.triu(B)     assert_almost_equal( L.dot(U),  A)          gc.disable()     st = time.time()          loops = 1 + min(1000000 // (N*N), 20000)          for l in range(loops):         np.copyto(B,A)         c_det_by_lu(ffi.cast("double *", y.ctypes.data),                     ffi.cast("double *", B.ctypes.data),                     ffi.cast("int", N))              et = time.time()     gc.enable()          return  (et - st)/loops        Scipy def run_scipy(A,B,y,N):      # check that result is correct     np.copyto(B,A)     (P,L,U) = lu(B,overwrite_a=True)      assert_almost_equal( P.dot(L.dot(U)),  A)          gc.disable()     st = time.time()          loops = 1 + min(1000000 // (N*N), 20000)      for l in range(loops):         np.copyto(B,A)         lu(B,overwrite_a=True)              et = time.time()     gc.enable()          return  (et - st)/loops        Lapack def run_lapack(A,B,y,N):      # check that result is correct          gc.disable()     st = time.time()          loops = 1 + min(1000000 // (N*N), 20000)      for l in range(loops):         np.copyto(B,A)         lu_factor(B,overwrite_a=True)              et = time.time()     gc.enable()          return  (et - st)/loops        Timings def timings(n=7,              series=["pure python", "c", "numba", "numpy",                      "cython", "scipy", "lapack", "julia"]):          Ns = np.array([5,10,30,100, 200, 300, 400, 600, 1000, 2000, 4000, 8000])     Fs = [run_python, run_c, run_numba, run_numpy,            run_cython, run_scipy, run_lapack]     times = pd.DataFrame(np.zeros((n, len(Fs)+1)), index = Ns[:n], columns = series)     for i,N in enumerate(Ns[:n]):         print ("N =", N, end=" ")         A = np.random.random((N,N))         B = np.empty(A.shape)         y = np.zeros(1)         for j,label in enumerate(series[:-1]):             if label != "":                  print(j, end=" ")                 times.loc[N,label] = Fs[j](A,B,y,N)         print("")     return times        执行,统计耗时times = timings(9)N = 5 0 1 2 3 4 5 6  N = 10 0 1 2 3 4 5 6  N = 30 0 1 2 3 4 5 6  N = 100 0 1 2 3 4 5 6  N = 200 0 1 2 3 4 5 6  N = 300 0 1 2 3 4 5 6  N = 400 0 1 2 3 4 5 6  N = 600 0 1 2 3 4 5 6  N = 1000 0 1 2 3 4 5 6  结果times
  python
  c
  numba
  numpy
  cython
  scipy
  lapack
  julia
  5
  0.000051   0.000016   0.000002   0.000074   0.000006   0.000029   0.000031   6.091400e-07   10
  0.000312   0.000016   0.000003   0.000234   0.000006   0.000030   0.000031   1.060710e-06   30
  0.007800   0.000028   0.000014   0.001950   0.000014   0.000070   0.000056   9.082080e-06   100
  0.289310   0.000154   0.000463   0.029782   0.000309   0.000309   0.000309   2.265530e-04   200
  2.277604   0.001800   0.007200   0.119600   0.003600   0.001200   0.001200   1.740604e-03   300
  7.636214   0.007800   0.019500   0.226200   0.007800   0.003900   0.001300   5.823171e-03   400
  18.267632   0.017829   0.051257   0.514801   0.020057   0.008914   0.002229   1.372135e-02   600
  62.197309   0.062400   0.124800   0.982802   0.088400   0.036400   0.010400   4.543215e-02   1000
  290.472510   0.257401   0.569401   3.042005   0.288600   0.070200   0.039000   2.642414e-01   画图 def plot_times(times, cols = [], name="runtimes.png"): plt.figure(figsize=(7,5)) if cols == []: cols = times.columns for i,label in enumerate(cols): if label != "": plt.loglog(times.index, times[label], label=label) plt.xlabel("N (matrix size)") plt.ylabel("runtime [sec]") plt.grid() plt.legend(loc=2) plt.savefig(name) plt.show() plot_times(times, cols=["pure python", "c", "numba"], name="runtimes_1")   plot_times(times, cols=["pure python", "c", "cython"], name="runtimes_2")   plot_times(times, cols=["pure python", "c", "numpy"], name="runtimes_3")   plot_times(times, cols=["pure python", "c", "scipy", "lapack"], name="runtimes_4")   plot_times(times, cols=["pure python", "c", "julia"], name="runtimes_5")

红米K50至尊版又降价,骁龙812G256G性价比到顶了每年的年末,不少人为了犒劳自己一年的辛苦,都会给自己换一部手机。近期,虽然vivoX90Pro小米13MOTOX40等第二代骁龙8机型陆续发布,但它们的价格还高高在上,不如选择骁龙苹果放开Appstore后,我就不会再买iPhone,买安卓这几天,有大量媒体报道称苹果在欧盟吃瘪,被逼着放开Appstore,要允许第三方商店存在了,否则不允许iPhoneiPad在欧盟销售。一时之间,网友们很多在狂欢,都说苹果这下没办法年底换机,不可错过的4款12GB256GB机型,性能卓越能用三五年2022年马上就要过去了,想在年底换新机的朋友一定不能错过这几年机型,全都是12G256G的,性能非常有优势,流畅使用三五年没问题。第一款小米12Pro天玑版小米12Pro发布三个iOS16。2曝出新Bug,电量狂掉12月14日,苹果发布了iOS16。2正式版系统,带来了一波新功能。除了无边记App,AppleMusic唱歌,新的锁屏小组件,以及息屏显示支持隐藏壁纸通知等新功能之外。苹果还推出星耀计划文王立鹏几千年来,其实他们一直都在,只是我们未曾察觉而已。他们来自遥远的雨谷星,是半人马座比邻星系的一颗美丽的行星,那里和地球一样有着阳光和雨露,有着冬夏和春秋5100年前,他们的小米11要不要升级MIUI14,听听过来人怎么说,光子引擎太香了!目前已经有很多机型适配了MIUI14开发版,我的小米11在MIUI14正式版发布之前就通过了内测的申请,如今已经收到了MIUI14开发版的推送,很多同款用户都在纠结小米11要不要升亚马逊如何核算店铺月度盈利与亏损Hi这是霏霏第一次和大家见面!小伙伴们,作为亚马逊运营,辛辛苦苦经营了店铺一个月后,你知道如何核算亚马逊月度盈亏?相信大家感兴趣的就是怎么核算店铺一个月盈亏,其中减去广告费用,站外用了五年苹果初体验小米12sUltra,反差这么大,实在是不吐不快在苹果家族入坑已经五年了,一直从iPhone7用到iPhone11,看着今年iPhone14发布后一直也没有大的更新,看朋友手里的小米用着不错,性价比也蛮高,想入手一款试试看。怕自哪吒S和特斯拉谁更值得买?选相同价位比较价格特斯拉model326。59万V哪吒S26。98万百公里加速特斯拉model35。6秒vs哪吒S6。9秒续航特斯拉model3556公里VS哪吒S715公里驱动两世界杯决赛!阿根廷阵容浮现天使复出,2大危机解除,冠军在望世界杯即将迎来最后的决赛,阿根廷对阵法国,两支豪门级别的球队状态存在差异。从晋级过程可以看出,法国队踢得更加轻松一些,他们的阵容也更加豪华,全队身价达到了9。9亿欧元,本届世界杯已库里伤停,勇士该如何赢球?科尔执教生涯或遇最大危机库里伤停的第一场比赛不出意外地输球了本场比赛库里维金斯格林三大全明星主力均未出战。正如外界预期那样子,压力都在主教练科尔以及影子库里乔丹普尔这边。本场比赛,普尔交出29分1篮板4助
哪家媒体这么勇?这么多明星的生图,全放出来了红毯之夜成了女明星比美的修罗场,一个个妆容娇艳,礼服华丽,气质高贵。但万万没想到,超勇媒体居然直接把女明星的生图放了出来。结果生图上的女明星都褪去了无暇光环,赵露思婴儿肥明显毛晓彤被撩了!Angelababy杨颖性感造型曝光,坐在引擎盖上面炫出大长腿点击上方关注小丸子,获取更多有趣有料的时尚资讯和明星穿搭。说起娱乐圈里面的神颜女神,很多粉丝估计会立马亮出Angelababy杨颖的名字。混血五官的baby长相清纯又甜美,自从出道冬季皮肤干燥,还不快试试以油养肤近年来以油养肤的概念可以说是火遍全网,相信很多人也是抱着疑惑的角度,那以油养肤到底值不值得相信呢?图源网络,侵删一以油养肤是智商税吗?以油养肤指的是为用护肤油去滋润皮肤的皮脂膜,从家有幼崽,如何教会他去面对可能会出现的霸凌呢?作为父母,可能最不愿看到自己的孩子被别人欺负了,尤其最近因为孩子被欺负而上了新闻和热搜的事情,让我更容易代入,不自觉地会去想,如果是我的孩子遇见了这样的事情我要怎么做?其实也不是我一到冬天,总是手脚冰凉晚上睡不着怎么办?女生注意啦很多人到了冬天就会手脚冰凉,特别是女性,晚上一宿一宿睡不着,我就是一个例子,甚至试过早上睡醒,脚还是冷的。你试过这样吗?下面教你们一种方法,就是泡脚。很多人到了冬天就会手脚冰凉,特总是手指疼痛是怎么回事?得警惕这4种疾病手指是一个特别灵活的部位,每天的活动频率都特别的高,但手指也不是无坚不摧的,也可能会因为某些原因出现疼痛感,比如过度劳累或者坚持做一个动作时,则可能会出现手指疼痛的情况,不过一般几冬天的萝卜你吃对了吗?萝卜是十字花科草本植物的根,外形呈细长圆筒状,上端为翠绿色,下端为玉白色,皮薄肉多,汁液较多,口味甘甜。富含淀粉酶膳食纤维钙磷铁钾维生素C叶酸等多种营养物质。1促进消化萝卜中的芥子2022年冬天的第一场雪2022年冬天的第一场雪2022年冬天的第一场雪一棵树雪中2022年冬天的第一场雪2022年冬天的第一场雪果然没让人失望。一夜之间,这座城便换了新装,银装素裹的外衣让人眼前一亮,这核冬天被证明虚假,如果全球核弹爆炸,后果人类能承受得住吗?你听说过核冬天吗?如果引爆100枚核弹地球会不会被所产生的灰尘覆盖?如果爆发核大战那地球是不是迅速进入冰世纪然后人类会在这当中慢慢消亡?对于这类核冬天的理论究竟是真是假跟着社长一起硅料组件等价格已出现全面下降,全国扩产项目不到两年超480个12月1日,2022中国光伏行业年度大会暨(滁州)光伏高质量发展高峰论坛在安徽省滁州市举行。红星资本局从论坛获悉,光伏行业的多项数据创历史新高,如新增装机出口总额等。对于困扰光伏行蔚来半固态电池下线,1000km续航,明年量产装车有望?蔚来的150kWh固态电池要来了?续航1000km,充电10分钟,补能400km续航?日前,卫蓝新能源宣布,11月22日在湖州基地迎来了第一颗固态动力电芯下线。同时,卫蓝新能源表示