如何解决如何测量排列总体的方差?
我需要计算置换总体(数组)中的方差,即
假设我有这个排列数组:
import numpy as np
import scipy.stats as stats
a = np.matrix([[1,2,3,4,5,6],[2,6,1,5],[6,4]])
# distance between a[0] and a[1]
distance = stats.kendalltau(a[0],a[1])[0]
那么,如何(在 Python 中)计算这个数组的方差,即如何测量这些排列彼此之间的距离?
问候
艾默里克
p.s:我通过kendalltau度量定义了两个排列之间的距离
解决方法
我不确定这是否是您正在寻找的数学结果。您可以使用 stats.kendalltau
计算所有可能对的距离,然后从该结果向量中获取方差。
为了获得距离向量,我使用 np.roll
遍历压缩列表 (a,a-shifted)
:
dist = []
for x1,x2 in zip(a,np.roll(a,shift=1,axis=0)):
dist.append(kendalltau(x1,x2)[0])
取所有距离的方差:
np.std(dist)
或者,如果您正在寻找 (discussed here) 的方差 然后取距离向量的范数:
np.linalg.norm(dist)
请注意,我使用的是 a
定义的 np.array
,而不是 np.matrix
:
a = np.array([[1,2,3,4,5,6],[2,6,1,5],[6,4]])
,
我假设您正在寻找可以在 3 个数组中的每一个上广播 kendalltau
函数并对它们进行置换的东西。在这种情况下,输出将是一个 3x3
矩阵。但是,当您说想要差异时,我不确定您在寻找什么。请在评论中澄清,我会相应地更新我的答案。希望这会有所帮助 -
a = np.array([[1,4]])
def f(a,b):
return np.array(stats.kendalltau(a,b)[0])
vf = np.vectorize(f,signature='(m),(m)->()')
out = vf(a[:,None,:],a[None,:,:])
print(out)
array([[ 1.,0.33333333,-0.06666667],[ 0.33333333,1.,-0.46666667],[-0.06666667,-0.46666667,1. ]])
那么,如何(在 Python 中)计算这个数组的方差,即如何测量这些排列彼此之间的距离?
IIUC,如果您尝试计算每个组合之间的 kendalltau
距离,然后检查距离之间的标准偏差,您可以使用 {{1} 过滤我们的下三角矩阵(没有对角线) } 然后获取 3 个值以获取 np.tril_indices(k=-1)
np.std
np.std(out[np.tril_indices(out.shape[0],k=-1)])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。