我当然遗漏了一些非常明显的东西,但是为什么这样做是可行的:
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'发布于 2015-08-07 04:38:25
答案很长,请参阅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意味着我们只能导入单个模块(这当然会导入该模块的依赖项)。
例如from statsmodels.robust.scale import mad或import statmodels.robust scale as smscale smscale.mad(...)
(小提示:如果内部结构发生变化,一些非常低级的导入可能不会始终保持向后兼容。然而,一般的策略是在保持旧的访问结构的同时,在一个或两个版本中弃用函数。)
发布于 2015-08-07 04:04:31
你可以,你只需要导入robust:
import statsmodels as sm
import statsmodels.robust然后:
>>> sm.robust.scale.mad(a)
0.35630934336679576robust是statsmodels的子包,导入包通常不会自动导入子包(除非包是显式编写的)。
https://stackoverflow.com/questions/31864749
复制相似问题