scipy.stats.

directional_stats#

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

計算方向性資料的樣本統計量。

計算向量樣本的方向平均值(也稱為平均方向向量)和平均合成長度。

方向平均值是用於衡量向量資料「偏好方向」的指標。它類似於樣本平均值,但適用於資料長度無關緊要的情況(例如單位向量)。

平均合成長度是介於 0 和 1 之間的值,用於量化方向性資料的離散程度:平均合成長度越小,離散程度越大。在 [1][2] 中給出了幾個涉及平均合成長度的方向變異數定義。

參數:
samplesarray_like

輸入陣列。必須至少為二維,且輸入的最後一個軸必須與向量空間的維度對應。當輸入正好是二維時,這表示資料的每一列都是向量觀測值。

axisint, 預設值: 0

計算方向平均值的軸。

normalize: boolean, 預設值: True

如果為 True,則正規化輸入以確保每個觀測值都是單位向量。如果觀測值已經是單位向量,請考慮將此設定為 False 以避免不必要的計算。

傳回:
resDirectionalStats

包含屬性的物件

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,4)

Mardia, Jupp. (2000). Directional Statistics (p. 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