我有一个大量使用numpy
的模块:
from numpy import array, median, nan, percentile, roll, sqrt, sum, transpose, unique, where
通过使用
来保持名称空间整洁是更好的做法吗?import numpy as np
然后当我需要使用array
时,只需使用np.array
,例如?
这个模块还会被反复调用,比如说数百万次,并且保持命名空间整洁似乎会增加一些开销?
setup = '''import numpy as np'''
function = 'x = np.sum(np.array([1,2,3,4,5,6,7,8,9,10]))'
print(min(timeit.Timer(function, setup=setup).repeat(10, 300000)))
1.66832
setup = '''from numpy import arange, array, sum'''
function = 'x = sum(array([1,2,3,4,5,6,7,8,9,10]))'
print(min(timeit.Timer(function, setup=setup).repeat(10, 300000)))
1.65137
为什么使用np.sum
和sum
会增加更多时间?
答案 0 :(得分:3)
是的,最好保持名称空间整洁。所以我会用
import numpy as np
它使您的代码更具可读性,当您看到类似np.sum(array)的调用时,系统会提醒您应使用numpy数组。第二个原因是,许多numpy函数的名称与scipy等其他模块中的函数的名称相同。如果同时使用这两个函数,则始终清楚您使用的是哪个。
正如您在所做的测试中所看到的那样,性能存在差异,如果您确实需要性能,则可以采用其他方法。
性能上的差异在于,在导入特定函数的情况下,您在脚本开头的numpy模块中引用了该函数。 对于常规模块导入,您只需导入对该模块的引用,而python需要在每次调用时解析/查找您在该模块中使用的功能。
答案 1 :(得分:1)
如果您可以定义自己的别名(当然要遵守团队惯例),那么您可以两全其美(更快的名称解析和不加阴影):
import numpy as np
(np_sum, np_min, np_arange) = (np.sum, np.min, np.arange)
x = np_arange(24)
print (np_sum(x))
定义别名的替代语法:
from numpy import \
arange as np_arange, \
sum as np_sum, \
min as np_min