【发布时间】:2015-02-28 22:32:00
【问题描述】:
我通过 Anaconda 2.1.0 发行版使用 scipy 和 numpy。我使用 Spyder 作为我的 Python IDE。
运行import scipy as sp时,无法通过sp.访问子包,如optimize、linalg、cluster等
但是,当我运行import numpy as np 时,我可以通过np 访问它的所有子包,例如linalg、random、matrixlib、多项式、测试等。
这两种导入的工作方式不同有什么原因吗?为什么import scipy as sp 不将所有 scipy 子包抓取到sp 的命名空间中?
【问题讨论】:
-
这确实是一个有趣的问题。有趣的是:在
import scipy as sp之后输入sp.optimize会给你一个错误。但是如果你这样做from scipy import optimize,突然sp.optimize不会再给你一个错误了。这个问题不是 anaconda 特有的。 -
@cel,你不会再收到错误了,因为当你输入
from scipy import optimize时,解释器意识到它已经加载了主包scipy,它会导入子模块@987654333 @ 在已加载的模块中。标识符sp指向与之前相同的模块,该模块现在已“更新”,因此您现在也可以通过标识符访问子模块optimize。 -
@gg349,哦,有道理 - 不知道 :)
-
从历史上看,
numpy是基本的集成数字包。scipy是独立开发的科学包合集。它们都使用numpy,但不相互依赖。