首页 > 解决方案 > 将 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.sumvs时这会增加更多时间sum

标签: pythonnumpyimport

解决方案


你是对的,最好保持命名空间干净。所以我会用

import numpy as np

它使您的代码更具可读性,当您看到像 np.sum(array) 这样的调用时,会提醒您应该使用 numpy 数组。第二个原因是,许多 numpy 函数与其他模块(如 scipy)中的函数具有相同的名称……如果您同时使用两者,则始终清楚您使用的是哪一个。

正如您在所做的测试中看到的那样,性能差异是存在的,如果您真的需要性能,您可以采用其他方式。

性能上的差异在于,在特定函数导入的情况下,您在脚本开头引用了 numpy 模块中的函数。在一般模块导入的情况下,您只导入对模块的引用,python 需要在每次调用时解析/查找您在该模块中使用的函数。


推荐阅读