直接进口子模块的任何好处(似乎较慢)



我想看看哪个更快:

import numpy as np
np.sqrt(4)

-or-

from numpy import sqrt
sqrt(4)

这是我用来找到平均运行时间的代码。

def main():
   import gen_funs as gf
   from time import perf_counter_ns
   t = 0
   N = 40
   for j in range(N):
      tic = perf_counter_ns()
      for i in range(100000):
         imp2()  # I ran the code with this then with imp1()
      toc = perf_counter_ns()
      t += (toc - tic)
   t /= N
   time = gf.ns2hms(t) # Converts ns to readable object
   print("Ave. time to run: {:d}h {:d}m {:d}s {:d}ms" .
        format(time.hours, time.minutes, time.seconds, time.milliseconds))
def imp1():
   import numpy as np
   np.sqrt(4)
   return
def imp2():
   from numpy import sqrt
   sqrt(4)
   return
if __name__ == "__main__":
   main()

当我import numpy as np然后致电np.sqrt(4)时,我的平均时间约为 229ms (该运行循环10 ** 4次(。

当我运行from numpy import sqrt然后致电sqrt(4)时,我的平均时间约为 332ms

由于运行时间有如此差异,运行from numpy import sqrt?Div>

我尝试使用time bash命令进行计时。我有215毫秒用于导入numpy并运行sqrt(4)和193ms,以通过同一命令从Numpy导入SQRT。老实说,区别可以忽略不计。

但是,如果您不需要模块的某些方面,则不鼓励它导入。

在这种特殊情况下,由于没有可辨别的性能益处,而且由于很少的情况您只会导入numpy.sqrt(math.sqrt的速度更快〜4倍。额外的功能numpy.sqrt优惠仅在您拥有numpy数据时才可用当然,这需要您导入整个模块(。

可能有一个罕见的情况,您不需要所有numpy,但仍然需要numpy.sqrt,例如使用pandas.DataFrame.to_numpy()并以某种方式操纵数据,但老实说,我认为20ms的速度在现实世界中不值得。尤其是因为您看到糟糕的仅导入numpy.sqrt

相关内容

  • 没有找到相关文章

最新更新