“查看实例对象的docstring以获取更多信息”是什么意思

时间:2016-04-03 22:22:52

标签: scipy instance docstring

我觉得这是一个愚蠢的问题,但是当我在一个IPython笔记本中,我确实帮助了一些numpy / scipy函数,比如说stat.norm.rvs,它经常说,关于* args和** kargs,“有关更多信息,请参阅实例对象的docstring”。如果没有帮助(stat.norm.rvs),我如何看到这个docstring?

1 个答案:

答案 0 :(得分:5)

不要感到愚蠢;有时很难找到您正在寻找的信息,尤其是在开始时。此外,scipy.stats中的大部分文档字符串都是自动生成的,因此它们有点通用,而不是定制的。好消息是,一旦你不知道如何操纵分发,所有其他的基本相同,因为他们共享相同的界面

让我们通过一个例子。既然你正在使用IPython(太棒了!),我们也可以 在对象之后使用问号,例如obj?,了解更多关于 宾语。这显示了文档字符串,如help(obj),以及其他有用的信息 作为其类型,在何处定义,以及(对于可调用的)其呼叫签名。

有助于了解事物的组织方式。 scipy.stats是一个模块:

In [386]: from scipy import stats

模块docstring列出了多种发行版。

In [394]: stats?
...
Continuous distributions
========================
   ...
   alpha             -- Alpha
   anglit            -- Anglit
   arcsine           -- Arcsine
   beta              -- Beta
   betaprime         -- Beta Prime
   ...
   norm              -- Normal (Gaussian)

有两个主要类别 - stats.rv_continuousstats.rv_discretestats文档字符串中列出的每个分发都是实例 这两个课程中的一个。例如,stats.norminstance of stats.norm_gensubclass of stats.rv_continuous

In [14]: type(stats.norm).mro()
Out[14]: 
[scipy.stats._continuous_distns.norm_gen,
 scipy.stats._distn_infrastructure.rv_continuous,
 scipy.stats._distn_infrastructure.rv_generic,
 object]

请注意stats.norms.rvs instancemethod

In [387]: stats.norm.rvs?
Type:        instancemethod
String form: <bound method norm_gen.rvs of <scipy.stats._continuous_distns.norm_gen object at 0x7f1479ba2690>>

所以稍后会说

  

分布的形状参数(请参阅实例的文档字符串       对象以获取更多信息)。

它说stats.norm的文档字符串中有更多信息:

In [401]: stats.norm?
Docstring:
A normal continuous random variable.

The location (loc) keyword specifies the mean.
The scale (scale) keyword specifies the standard deviation.
...
Methods
-------
``rvs(loc=0, scale=1, size=1, random_state=None)``
    Random variates.

从这个描述中你可以看到stats.norm.rvs(loc=10, scale=2, size=5)将返回5个随机变量,平均值为10,标准差为2:

In [402]: stats.norm.rvs(loc=10, scale=2, size=5)
Out[402]: array([  9.82454792,   8.52106712,   7.33889233,   8.73638555,  10.90927226])

或者,stats.norm也可以调用 - 您可以传递locscale&#34;形状&#34;参数to "freeze" those parameters进入分布。你得到的东西被称为&#34;冻结分布&#34;。例如,您可以使用平均值10和标准偏差2创建正态分布:

In [403]: norm = stats.norm(10, 2)

现在调用冻结分发的rvs方法获取5个随机变量:

In [404]: norm.rvs(5)
Out[404]: array([  7.21018883,  12.98978919,  10.99418761,  11.2050962 ,   8.27780614])