python - 将 numpy 导入为 np 与从 numpy 导入
问题描述
我有一个大量使用的模块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
vs时这会增加更多时间sum
?
解决方案
你是对的,最好保持命名空间干净。所以我会用
import numpy as np
它使您的代码更具可读性,当您看到像 np.sum(array) 这样的调用时,会提醒您应该使用 numpy 数组。第二个原因是,许多 numpy 函数与其他模块(如 scipy)中的函数具有相同的名称……如果您同时使用两者,则始终清楚您使用的是哪一个。
正如您在所做的测试中看到的那样,性能差异是存在的,如果您真的需要性能,您可以采用其他方式。
性能上的差异在于,在特定函数导入的情况下,您在脚本开头引用了 numpy 模块中的函数。在一般模块导入的情况下,您只导入对模块的引用,python 需要在每次调用时解析/查找您在该模块中使用的函数。
推荐阅读
- java - Gradle CLI:如何查看特定选项的文档
- javascript - 在作用域插槽中传递道具不起作用
- python - 这两种保存keras机器学习模型权重的方式有什么区别?
- java - 在调用 getcellData() 时从 excel 中获取任何值 - Selenium WebDriver
- javascript - 使用 'timeupdate' 事件实现视频字幕更改
- jquery - 检索输入文本中的数据
- java - spring-jdbc vs spring-data-jdbc,它们支持什么
- c# - 是有效的 html 或 xml 注释吗?
- request - Dart - 使用 cookie 请求 GET
- javascript - 如何通过 PHP 中另一个函数的构造()访问返回值?