我觉得这是一个愚蠢的问题,但当我在IPython笔记本上时,我确实在一些numpy/scipy函数上提供了帮助,比如stat.norm.rvs,它经常说,关于*args和**kargs,"有关更多信息,请参阅实例对象的docstring"。如果没有帮助(stat.norm.rvs),我该如何查看此文档字符串?
不要觉得自己很笨;有时很难找到你想要的信息,尤其是刚开始的时候。此外,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_continuous
和stats.rv_discrete
。stats
文档字符串中列出的每个分发版都是的实例这两类中的一类。例如,stats.norm
是stats.norm_gen
是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
是实例方法:
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
也是可调用的——您可以传递loc
和scale
"形状"参数,以将这些参数"冻结"到分布中。你得到的是所谓的"冻结分配"。例如,您可以创建一个平均值为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])