scipy.stats.

directional_stats#

scipy.stats.directional_stats(samples, *, axis=0, normalize=True)[source]#

计算方向数据的样本统计数据。

计算向量的样本平均数(也称为平均方向向量)和平均结果长度。

方向均值是向量数据“首选方向”的度量。类似于样本均值,但当数据的长度不相关(例如单位向量)时使用。

平均结果长度是用于量化方向数据分散程度的 0 到 1 之间的值:平均结果长度越小,分散越大。[1][2] 中给出了涉及平均结果长度的几种方向方差的定义。

参数:
samplesarray_like

输入数组。必须至少是二维,并且输入的最后一轴必须与向量空间的维度相对应。当输入恰好为二维时,这意味着数据每一行是一个向量观测。

axisint,默认为 0

计算方向均值的轴线。

normalized: 布尔型,默认值:True

如果 True,则规范化输入以确保每个观测值都为单位向量。如果观测值已经为单位向量,请考虑将其设置为 False 以避免不必要的计算。

返回:
resDirectionalStats

包含以下属性的对象

mean_directionndarray

方向均值

mean_resultant_lengthndarray

平均结果长度 [1]

参见

circmean

圆形均值;即 2D角度的方向均值

circvar

圆形方差;即 2D角度的方向方差

注意

这使用 [1] 中的方向均值定义。假设观测值是单位向量,则计算方式如下。

mean = samples.mean(axis=0)
mean_resultant_length = np.linalg.norm(mean)
mean_direction = mean / mean_resultant_length

此定义适用于方向性数据(即大小与每个观测值无关的矢量数据),但不适用于轴向数据(即大小和符号与每个观测值无关的矢量数据)。

已经提出了涉及平均结果长度 R 的多个方向方差定义,包括 1 - R [1]1 - R**2 [2]2 * (1 - R) [2]。这个函数不选择其中一个,而是返回 R 作为属性 mean_resultant_length,以便用户可以计算他们首选的离散度量。

参考资源

[1] (1,2,3,4)

Mardia, Jupp. (2000)。方向统计(第 163 页)。Wiley。

示例

>>> import numpy as np
>>> from scipy.stats import directional_stats
>>> data = np.array([[3, 4],    # first observation, 2D vector space
...                  [6, -8]])  # second observation
>>> dirstats = directional_stats(data)
>>> dirstats.mean_direction
array([1., 0.])

相反,向量的常规样本均值将受到每个观测值大小的影响。此外,结果不会是单位向量。

>>> data.mean(axis=0)
array([4.5, -2.])

一个典型的使用案例 directional_stats 是找到一组球体观测值(例如地理位置)的有意义中心。

>>> data = np.array([[0.8660254, 0.5, 0.],
...                  [0.8660254, -0.5, 0.]])
>>> dirstats = directional_stats(data)
>>> dirstats.mean_direction
array([1., 0., 0.])

另一方面,常规样本均值得到的结果不位于球体表面。

>>> data.mean(axis=0)
array([0.8660254, 0., 0.])

该函数还返回平均结果长度,可用于计算方向方差。例如,使用 [2] 中的定义 Var(z) = 1 - R,其中 R 是平均结果长度,我们可以计算上述示例中向量的方向方差为

>>> 1 - dirstats.mean_resultant_length
0.13397459716167093