directional_stats#
- scipy.stats.directional_stats(samples, *, axis=0, normalize=True)[源代码]#
计算方向数据的样本统计量。
计算向量样本的方向平均值(也称为平均方向向量)和平均合成长度。
方向平均值是向量数据“首选方向”的度量。它类似于样本均值,但适用于数据长度无关紧要的情况(例如,单位向量)。
平均合成长度是一个介于 0 和 1 之间的值,用于量化方向数据的分散程度:平均合成长度越小,分散程度越大。在 [1] 和 [2] 中给出了几个涉及平均合成长度的方向方差的定义。
- 参数:
- samplesarray_like
输入数组。必须至少是二维的,并且输入的最后一个轴必须与向量空间的维度对应。当输入恰好是二维时,这意味着数据的每一行都是一个向量观测值。
- axisint,默认值:0
计算方向平均值的轴。
- normalize: boolean,默认值:True
如果为 True,则规范化输入以确保每个观测值都是单位向量。如果观测值已经是单位向量,请考虑将其设置为 False 以避免不必要的计算。
- 返回:
- resDirectionalStats
包含属性的对象
- mean_directionndarray
方向平均值。
- mean_resultant_lengthndarray
平均合成长度 [1]。
备注
这使用了 [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,以便用户可以计算他们首选的分散度量。参考文献
示例
>>> 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