You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中计算向量中任意两个分数的平均绝对差

计算向量中任意两个分数的平均绝对差(两两差异版)

首先明确一下:你要的是所有两两分数对之间的绝对差值的平均值,和常见的MAD(均值/中位数绝对偏差,衡量数据相对于集中趋势的离散程度)完全不同,这个是直接计算每一对数据之间的差异,再求平均,对吧?

计算逻辑

要实现这个需求,核心步骤是:

  • 生成向量中所有无序的两两分数对(避免重复计算,比如(x1,x2)和(x2,x1)的绝对差是一样的,只算一次更高效)
  • 对每一对计算绝对差值
  • 将所有差值求和,除以总对数(总对数公式是n*(n-1)/2,n是向量长度)得到平均值

如果你只是需要所有两两绝对差值的列表,只需要完成前两步即可。

代码示例

下面给两个常用数据分析语言的实现:

Python 实现

用itertools.combinations生成所有两两组合,然后计算绝对差和平均值:

import itertools

def get_pairwise_abs_diffs(vec):
    """生成所有两两分数的绝对差值列表"""
    pairs = itertools.combinations(vec, 2)
    return [abs(a - b) for a, b in pairs]

def pairwise_mean_absolute_diff(vec):
    """计算所有两两分数绝对差值的平均值"""
    abs_diffs = get_pairwise_abs_diffs(vec)
    n = len(vec)
    total_pairs = n * (n - 1) // 2
    return sum(abs_diffs) / total_pairs if total_pairs > 0 else 0

# 测试示例
scores = [85, 92, 78, 90, 88]
print("所有两两绝对差值:", get_pairwise_abs_diffs(scores))
print("平均绝对差值:", pairwise_mean_absolute_diff(scores))

R 实现

用combn函数来生成两两组合并计算绝对差:

get_pairwise_abs_diffs <- function(vec) {
  # 生成所有两两组合的绝对差值向量
  combn(vec, 2, function(x) abs(x[1] - x[2]))
}

pairwise_mean_absolute_diff <- function(vec) {
  # 计算平均绝对差值
  mean(get_pairwise_abs_diffs(vec))
}

# 测试示例
scores <- c(85, 92, 78, 90, 88)
print("所有两两绝对差值:")
print(get_pairwise_abs_diffs(scores))
print("平均绝对差值:")
print(pairwise_mean_absolute_diff(scores))

补充说明

  • 如果你的需求是包含有序对(即同时算(x1,x2)和(x2,x1)),那总对数是n*(n-1),但由于绝对差的对称性,最终的平均值和无序对的结果是完全一致的,所以用无序对计算更节省资源。
  • 如果向量长度小于2,那没有两两对,平均值可以设为0或者根据你的需求处理。

内容的提问来源于stack exchange,提问作者David Disabato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:11