我肯定错过了一些非常明显的东西,但为什么会这样:
a = [0.2635,0.654654,0.365,0.4545,1.5465,3.545]
import statsmodels.robust as rb
print rb.scale.mad(a)
0.356309343367
但这并不是:
import statsmodels as sm
print sm.robust.scale.mad(a)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-1ce0c872b0be> in <module>()
----> 1 print statsmodels.robust.scale.mad(a)
AttributeError: 'module' object has no attribute 'robust'
答案 0 :(得分:3)
长答案见http://www.statsmodels.org/stable/importpaths.html
Statsmodels 故意大部分为空__init__.py
,但通过api.py
进行并行导入收集。
交互式工作import statsmodels.api as sm
的推荐导入几乎导入了所有的statsmodel,numpy,pandas和patsy,以及scipy的大部分内容。冷启动时这是懒散的。
如果我们只想导入statsmodel的特定部分,那么我们不需要导入所有这些额外内容。空__init__.py
意味着我们只能导入一个模块(当然会导入该模块的依赖项)。
e.g。 from statsmodels.robust.scale import mad
或
import statmodels.robust scale as smscale
smscale.mad(...)
(小警告:如果内部结构发生变化,一些非常低级别的导入可能不会始终向后兼容。但是,一般策略是在维护旧访问结构的同时弃用一个或两个版本的函数。)
答案 1 :(得分:2)
您可以,您只需要导入robust
:
import statsmodels as sm
import statsmodels.robust
然后:
>>> sm.robust.scale.mad(a)
0.35630934336679576
robust
是statsmodels
的子包,导入包通常不会自动导入子包(除非明确写入包)。