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

如何用Tcl计算数据集中样本量更大组的(X,Y)平均值?

用Tcl计算样本量更大组的(X,Y)平均值

需求说明

需要先判断数据集中哪组样本量(数据点数量)更多,再仅计算该组的(X,Y)平均值,而非整个数据集的平均(示例中橙色区域为整体平均,蓝色区域为分组平均)。

示例数据集

X    Y
1    9
1.5  8.5
0.5  9.5
1.5  9.5
1    9.5
0.5  8.5
1.5  9
0.5  9
0    9
0    8.5
2    9
1.7  8.7
1.2  9.2
0.2  9.2
0.7  8.3
1    8
8.5  1.5
9.5  0.5
8.5  0.5
9    1.5
9.5  0
8    0
9    0.5

实现思路与Tcl代码

核心思路是一次遍历完成分组统计,同时记录每组的样本量、X总和、Y总和,最后比较两组样本量,计算对应组的平均值。

从示例数据和示意图来看,两组可通过X和Y的大小关系区分:一组是X偏小、Y偏大(X<5且Y>5),另一组是X偏大、Y偏小(X>5且Y<5)。你可以根据实际数据调整分组规则。

# 初始化分组统计变量
set groupA_count 0
set groupA_sumX 0.0
set groupA_sumY 0.0

set groupB_count 0
set groupB_sumX 0.0
set groupB_sumY 0.0

# 示例数据集(实际场景可从文件读取)
set data {
1    9
1.5  8.5
0.5  9.5
1.5  9.5
1    9.5
0.5  8.5
1.5  9
0.5  9
0    9
0    8.5
2    9
1.7  8.7
1.2  9.2
0.2  9.2
0.7  8.3
1    8
8.5  1.5
9.5  0.5
8.5  0.5
9    1.5
9.5  0
8    0
9    0.5
}

# 遍历每一行数据
foreach line [split $data "\n"] {
    # 跳过空行和表头
    if {$line eq "" || [string match "X    Y" $line]} {
        continue
    }
    # 拆分X和Y数值
    lassign [split $line] x y
    # 执行分组判断(可根据实际数据调整规则)
    if {$x < 5 && $y > 5} {
        incr groupA_count
        set groupA_sumX [expr {$groupA_sumX + $x}]
        set groupA_sumY [expr {$groupA_sumY + $y}]
    } elseif {$x > 5 && $y < 5} {
        incr groupB_count
        set groupB_sumX [expr {$groupB_sumX + $x}]
        set groupB_sumY [expr {$groupB_sumY + $y}]
    }
}

# 确定样本量更大的组并计算平均值
if {$groupA_count > $groupB_count} {
    set avgX [expr {$groupA_sumX / $groupA_count}]
    set avgY [expr {$groupA_sumY / $groupA_count}]
    puts "样本量更大的是组A(共$groupA_count个数据点),平均值:X=[format "%.2f" $avgX], Y=[format "%.2f" $avgY]"
} elseif {$groupB_count > $groupA_count} {
    set avgX [expr {$groupB_sumX / $groupB_count}]
    set avgY [expr {$groupB_sumY / $groupB_count}]
    puts "样本量更大的是组B(共$groupB_count个数据点),平均值:X=[format "%.2f" $avgX], Y=[format "%.2f" $avgY]"
} else {
    set avgA_X [expr {$groupA_sumX/$groupA_count}]
    set avgA_Y [expr {$groupA_sumY/$groupA_count}]
    set avgB_X [expr {$groupB_sumX/$groupB_count}]
    set avgB_Y [expr {$groupB_sumY/$groupB_count}]
    puts "两组样本量相同,组A平均值:X=[format "%.2f" $avgA_X], Y=[format "%.2f" $avgA_Y];组B平均值:X=[format "%.2f" $avgB_X], Y=[format "%.2f" $avgB_Y]"
}

代码说明

  • 一次遍历完成计数与累加,避免重复遍历提升效率;
  • 分组规则可灵活调整(比如聚类逻辑、其他阈值判断);
  • 用format "%.2f"控制平均值小数位数,按需调整精度;
  • 处理了两组样本量相同的边界情况,避免逻辑遗漏。

内容的提问来源于stack exchange,提问作者Kuo-Hsien Chang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:27:38