为什么我不能直接导入statsmodels?

2024-05-17 03:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我当然遗漏了一些很明显的东西,但是为什么这样做:

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'

Tags: importmostasattributeerrormodulesmrobustprint
2条回答

长答案见http://www.statsmodels.org/stable/importpaths.html

Statsmodels有故意的大部分是空的__init__.py,但是有一个通过api.py的并行导入集合。

交互式工作的推荐导入import statsmodels.api as sm导入几乎所有的statsmodels、numpy、pandas和patsy以及scipy的大部分。这是冷启动时的慢行。

如果我们只想导入statsmodels的一个特定部分,那么就不需要导入所有这些额外的内容。空的__init__.py意味着我们可以只导入一个模块(当然,它会导入该模块的依赖项)。

例如from statsmodels.robust.scale import madimport statmodels.robust scale as smscalesmscale.mad(...)

(小警告:如果内部结构发生变化,一些非常低水平的进口产品可能并不总是保持向后兼容。但是,一般的策略是在维护旧的访问结构的同时,在一个或两个版本上弃用函数。)

你可以,你只需要导入robust以及:

import statsmodels as sm
import statsmodels.robust

然后:

>>> sm.robust.scale.mad(a)
0.35630934336679576

robuststatsmodels的子包,导入包通常不会自动导入子包(除非已显式写入包)。

相关问题 更多 >