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

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")

妻子与学生私奔,高调登报离婚,晚年他功成名就,妻子后悔已晚本文来源公众号纪人物没有经济的恋爱是一盘散沙是现代人对感情的看法,似乎失去了两人厮守的看法,在民国时期,就有一对夫妇结婚20年,生儿育女,妻子却嫌跟着丈夫太苦,与丈夫的学生私奔,晚苦剧本式真人秀久矣的观众,渴望真的回归林文婧(重庆大学)12月29日,话题哈佛学霸被质疑专业能力登上热搜。报道中,真人秀合伙吧少年里,哈佛毕业且专业对口的嘉宾因给出的方案不符要求而被组员当场质疑在学校都学了什么?。该情谁说胖不性感?我195斤,大码模特,嫁给乘务长,他很喜欢我身材这是我们讲述的第1344位真人故事我是米亚大码模特米亚,我身高1。66米,体重195斤。身材肥胖是很多姑娘的烦恼。但是,谁说胖就不能美了呢?这个世界上,美并没有绝对的标准,对于女孩比拉尔萨大胆!安东尼前妻和友人跨年合影,穿着太过抢镜2023年刚刚来临,在新的一年到来之际,很多名人都在个人社媒上晒出了跨年照,并在社媒上祝福新年快乐。近期在NBA场外最受关注的皮蓬前妻拉尔萨也不例外,48岁的她首次带乔丹的儿子马库清末民初老照片,民国才女林徽因陆小曼徐志摩真实照片修复老照片记录难得一见的历史场景,见证一百多年前的大清沧桑。这几张照片虽然琐碎,却能拼凑一段历史,真切地感受当时的社会日常!关注一下看彩色的历史故事陆小曼林徽因徐志摩民国最有名气的才子曾有三位皇帝下诏为她改名,仙源风采,千年鹿邑摄影苏献智天上有鹿邑星,地上有鹿邑城。豫皖交界处,这里是连接中原经济区和长三角的枢纽城市这里因是老子故里而闻名海内外,作为华夏腹地,这里区位优势明显,她是河南省直管县之一,鹿邑县还中外企业热议中国经济活力复苏鼓舞信心未来发展前景光明中国日报网1月2日电随着我国疫情防控进入新的阶段,进一步释放经济发展活力提振经济信心,成为了关系2023年经济行稳致远的重要议题。前不久闭幕的中央经济工作会议指出,要从战略全局出发iOS16。3紧急推送,史诗优化,续航暴增,老机型可以养老了苹果iOS16。3值得升级吗?很多粉丝都在问,今天给大家分享一款老机型升级iOS16。3的真实体验反馈,各机型可以根据体验反馈进行参考来决定是否升级!iPhoneSE2作为一款老机骁龙8Gen2机型井喷!一加11在1月4日发布,魅族20则在春季见面每到年底,高通都会发布新一代旗舰芯片,为智能手机市场注入活力。如今正值新年年初,市面上就涌现了不少骁龙8Gen2新机。比如最近一加品牌打算推出一加11,在1月4日正式发布。目前从官热巴怀孕风波升级!现身机场拼命遮肚添新锤,半年不工作遭质疑有没有越深扒,越干净的明星近日,热巴怀孕的消息越传越烈,而在这种关键时刻,热巴工作室却突然消失了。要放以前,但凡有热巴的一点绯闻,工作室都是第一时间辟谣,可如今,热巴怀孕消息越传越同样演拼命三娘,刘亦菲赵丽颖对比,差异就出来了由刘亦菲李现领衔主演的去有风的地方开播,不得不说,该剧的开篇还是非常精彩的,这部剧是刘亦菲首部现代剧,镜头下的刘亦菲很美,而且剧的调色布景包括刘亦菲的演绎方式,去有风的地方开篇,有
走啊去台湾省吃山西刀削面5日,不少网友在社交媒体表示,现在在地图搜索台湾省,能看到完整显示的台湾地图了,地图可显示台湾省每个街道后,有网友在看地图时发现了山西刀削面等小吃店,表示想去台湾省吃山西刀削面。地中国禁止对台湾省的天然砂出售!天然砂有什么用?大家好我是每天更新的尧,八月三日我国宣布禁止对台出售天然砂,天然砂有什么用?今天就带大家一起了解一下国家商务部八月三日禁止向台湾地区出口天然砂迪拜曾经为了建造哈利法塔,一船一船的从来看看台湾省管理的几个岛屿位置这2天由于佩老太婆的窜台行为,大家心情都一样,从落地时的极度愤怒,觉得我们反应太弱,再到8月4号看到东南西北对台湾省的封锁军事演习,导弹直接穿过台湾省本岛,才体会到国家的大智慧,在8月高温仍来势汹汹,闷热持续,部分地区气温或创今年新高(健康时报周欣雨)北京等地日前连续遭遇大面积强降雨天气,降水没有带来凉爽,反而提高了湿度。北京市气象台8月5日05时40分继续发布高温黄色预警信号预计8月5日至7日,北京大部分地区大量中国渔船在演习区边缘吃瓜,甚至有渔船跑到了台湾港口近日,有热心网友发现,在台海演习区的边缘出现了大量的浙江福建渔船。这些渔船徘徊在演习区的边缘,吃着最新鲜的瓜。这也说明咱们的渔民老百姓十分地信任我们的人民军队呀,完全不怕咱们的子弟台海军演,中国渔民已经去台北和高雄玩了看到下面的几张图片,我噗的一声,把喝的水都喷到键盘上了。这哪呀跟哪呀,我们的军队还在外面搞军演,我们朴素善良诚实的渔民朋友就已经迫不及待地去台湾渔场捡鱼去了。这真是发育了中国人民艰澳门坊间质疑从跨海缆车到两局踢波,已非昔日赌收3千亿的赌城,为何还要养一只又一只大白象?澳门6月18日开始爆发疫情,为防止新冠肺炎在本澳传播,自6月20日起政府公共部门一直处于关闭状态,很多政府部门进行中的工作因而受到影响,就连很多原本社会争议的热点事件都迅速被疫情覆9位爱改年龄的女星,有人永远30岁,有人自曝其短,有人闹出笑话众所周知,在娱乐圈里,男明星喜欢把身高往高了填,而女明星则喜欢把年龄往小了报。相比起男明星,女明星在娱乐圈,几乎都保养得特别好,看不出年龄的那种。而女明星的年龄,也时常是个谜,几乎大学女教师千万粉丝美女博主不堪网暴,以诽谤罪报案获刑事立案,涉案女子我也找了律师,咱们法庭见拥有千万粉丝的美女博主,称遭遇从线上到线下的网络暴力。8月3日,这名西安女教师告诉记者她这么干一方面给我造成名誉损失,另一方面已经严重干扰到我的现实生活和工作秩序,对我的伤害太大了央视点名的造假网红,背景果然不简单这可能是我最近在互联网近上刷到的最好笑的一个人了视频中这位圆墩墩留着山羊的眼睛大叔突兀地怼在镜头前直播,而背景则是美的像油画一样的新疆伊犁美景。结果因为人和景的巨大落差而惨遭网友质99年歼10首飞不久,绝密资料在大学网站泄露,公安调查发现不简单文南柯解史编辑南柯解史1999年5月,我国歼10战机的各项重要参数竟然出现在各高校网站上,对此我国紧急调派人手对此事进行秘密调查,并把此文章紧急删掉,查之前以为是间谍,谁知这个人的