scipy.stats.

directional_stats#

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

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

计算一组向量的方向均值(也称为均值方向向量)和均值结果长度。

方向均值是矢量数据“偏好方向”的一种度量。它类似于样本均值,但在数据长度无关紧要时使用(例如单位矢量)。

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

参数:
示例array_like

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

int, 默认值: 0

计算方向均值的轴。

normalize: boolean, default: True

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

返回:
res方向统计

一个包含属性的对象:

mean_directionndarray

方向平均。

mean_resultant_lengthndarray

平均结果长度 [1]

参见

circmean

圆周平均;即二维 角度 的方向平均

circvar

圆形方差;即二维 角度 的方向方差

注释

这使用了来自 [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)

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

[2] (1,2,3)

https://en.wikipedia.org/wiki/方向统计学

示例

>>> 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