首页 > 解决方案 > 如何测量一组排列的方差?

问题描述

我需要计算排列的总体(数组)中的方差,即

假设我有这个排列数组:

import numpy as np
import scipy.stats as stats


a = np.matrix([[1,2,3,4,5,6], [2,3,4,6,1,5], [6,3,1,2,5,4]])

# distance between a[0] and a[1]
distance = stats.kendalltau(a[0], a[1])[0]

那么,如何(在 Python 中)计算这个数组的方差,即如何测量这些排列彼此之间的距离?

问候

艾美瑞克

ps:我用 kendalltau 度量定义了两个排列之间的距离

标签: pythonnumpystatisticsvariancetraveling-salesman

解决方案


我不确定这是否是您正在寻找的数学结果。您可以使用stats.kendalltau计算所有可能对的距离,然后从该结果向量中获取方差。

(a, a-shifted)为了获得距离向量,我使用以下方法遍历压缩列表np.roll

dist = []
for x1, x2 in zip(a, np.roll(a, shift=1, axis=0)):
    dist.append(kendalltau(x1, x2)[0])

取所有距离的方差:

np.std(dist)

或者,如果您正在寻找方差在此处输入图像描述此处讨论),则采用距离向量的范数:

np.linalg.norm(dist)

注意我使用a的是定义np.array,而不是np.matrix

a = np.array([[1,2,3,4,5,6], [2,3,4,6,1,5], [6,3,1,2,5,4]])

推荐阅读