导入numpy和Scipy包的模块/子包的差异

use*_*287 7 python import numpy scipy

我通过Anaconda 2.1.0发行版使用scipy和numpy.我使用Spyder作为我的Python IDE.

当我运行时 import scipy as sp,我无法访问子包,例如optimize,linalg,cluster等sp.

但是,当我运行时import numpy as np,我能够访问其所有子包,例如linalg,random,matrixlib,polynomial,testing等np.

这两种进口是否有不同的原因?为什么不import scipy as sp抓住所有scipy子包进入sp命名空间?

gg3*_*349 5

通过设计python语言,可能会出现这种不同导入行为的可能性.

默认情况下,模块(*)的import语句只导入主模块,而不导入子模块.主模块可以(例如在)的情况下numpy,或者可以不(例如scipy)导入一些或所有子模块.

这背后的原因如下scipy:在大多数情况下,您只需要一个scipy包的子模块.此默认行为不会挂起解释器加载代码不必要的子模块.

编辑:请注意,numpy默认情况下不会导入所有子模块,例如它不加载numpy.f2py,请参阅问题/答案以获取更多详细信息.

(*)这里我的意思是一个像import scipy或的导入语句import scipy as sp,其中加载了一个模块.当然如果你写,import scipy.optimize那么python将首先加载主模块,然后加载子模块.