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]。
註解
這使用了 [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