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

R语言如何计算矩阵每行以第24行为数值的加权均值

矩阵逐行加权均值计算实现指南

需求说明

你需要处理一个24行18列的数值矩阵,计算规则如下:

  • 对矩阵第1行到第23行分别计算加权均值
  • 每一行自身的元素值作为对应列的权重
  • 矩阵第24行的同列元素值作为加权计算的实际数值
  • 计算完成后在每行末尾追加一列,存储该行的加权均值结果,结果保留6位小数即可匹配示例效果

加权均值计算公式:加权均值 = sum(当前行第j列元素 * 第24行第j列元素) / sum(当前行所有元素),其中j遍历所有18列。

原始矩阵数据

1  107 33 41 22 12 4 122 44 297 123 51 16  7  9  1  1  0
10   5  2  2  1  0 3   4  6  12   3  3  0  1  1  0  0  0
11   1  3  1  0  0 0   4  2   8   3  4  0  0  0  0  0  0
12   2  1  1  0  0 0   2  1   5   6  3  1  0  0  0  0  0
13   1  0  1  0  0 0   3  1   3   5  2  2  0  1  0  0  0
14   3  0  0  0  0 0   3  1   2   3  0  1  0  0  0  0  0
15   0  0  0  0  0 0   2  0   0   1  0  1  0  0  0  0  0
16   0  0  0  0  1 0   0  0   2   0  0  0  0  0  0  0  0
17   1  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
18   1  0  0  0  0 0   0  0   0   0  0  0  0  0  0  0  0
19   0  0  0  0  0 0   1  0   0   0  0  0  0  0  0  0  0
2   80 27 37  5  6 4  97 48 242 125 44 27  7  8  8  0  2
20   0  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
21   0  0  0  0  0 0   0  0   0   0  1  0  0  0  0  0  0
22   0  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
23   0  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
3   47 12 33 12  6 1  63 42 200  96 45 19  6  6  9  2  0
4   45 14 21  9  4 2  54 26 130  71 36 17  8  5  1  0  2
5   42 10 14  6  3 2  45 19  89  45 26  7  4  8  2  1  0
6   17  3 12  5  2 0  18 21  51  41 19 15  5  1  1  0  0
7   16  2  6  0  0 1  14  9  37  23 17  7  3  0  3  0  0
8    9  4  4  2  1 0   7  9  30  15  8  3  3  1  1  0  1
9   12  2  3  1  1 1   6  5  14  12  5  1  2  0  0  1  0
24   0  1  2  3  4 5   6  7   8   9 10 11 12 13 14 15 16

结果示例

前两行计算完成后的效果如下,末尾新增列为加权均值结果:

1  107 33 41 22 12 4 122 44 297 123 51 16  7  9  1  1  0 6.391011
10   5  2  2  1  0 3   4  6  12   3  3  0  1  1  0  0  0 6.232558

实现思路(Python实现,适合初学者)

不需要安装额外第三方库,用基础Python语法即可完成,步骤拆分如下:

  1. 把原始矩阵按行读取,每一行分割为整数数值存入二维列表
  2. 单独取出第24行(Python列表索引从0开始,对应索引值为23)作为数值基准行
  3. 遍历前23行(索引0到22),对每一行分别计算权重总和、加权乘积和,再做除法得到加权均值
  4. 把计算得到的均值追加到当前行末尾
  5. 按格式逐行输出最终结果即可

参考代码

# 读入原始矩阵数据
raw_data = """1  107 33 41 22 12 4 122 44 297 123 51 16  7  9  1  1  0
10   5  2  2  1  0 3   4  6  12   3  3  0  1  1  0  0  0
11   1  3  1  0  0 0   4  2   8   3  4  0  0  0  0  0  0
12   2  1  1  0  0 0   2  1   5   6  3  1  0  0  0  0  0
13   1  0  1  0  0 0   3  1   3   5  2  2  0  1  0  0  0
14   3  0  0  0  0 0   3  1   2   3  0  1  0  0  0  0  0
15   0  0  0  0  0 0   2  0   0   1  0  1  0  0  0  0  0
16   0  0  0  0  1 0   0  0   2   0  0  0  0  0  0  0  0
17   1  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
18   1  0  0  0  0 0   0  0   0   0  0  0  0  0  0  0  0
19   0  0  0  0  0 0   1  0   0   0  0  0  0  0  0  0  0
2   80 27 37  5  6 4  97 48 242 125 44 27  7  8  8  0  2
20   0  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
21   0  0  0  0  0 0   0  0   0   0  1  0  0  0  0  0  0
22   0  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
23   0  0  0  0  0 0   0  0   1   0  0  0  0  0  0  0  0
3   47 12 33 12  6 1  63 42 200  96 45 19  6  6  9  2  0
4   45 14 21  9  4 2  54 26 130  71 36 17  8  5  1  0  2
5   42 10 14  6  3 2  45 19  89  45 26  7  4  8  2  1  0
6   17  3 12  5  2 0  18 21  51  41 19 15  5  1  1  0  0
7   16  2  6  0  0 1  14  9  37  23 17  7  3  0  3  0  0
8    9  4  4  2  1 0   7  9  30  15  8  3  3  1  1  0  1
9   12  2  3  1  1 1   6  5  14  12  5  1  2  0  0  1  0
24   0  1  2  3  4 5   6  7   8   9 10 11 12 13 14 15 16"""

# 转换为整数类型二维列表
matrix = []
for line in raw_data.split('\n'):
    row = list(map(int, line.split()))
    matrix.append(row)

# 取出第24行作为加权计算的基准值行
base_row = matrix[23]

result = []
# 遍历前23行计算加权均值
for i in range(23):
    current_row = matrix[i]
    weight_sum = 0
    product_sum = 0
    for j in range(len(current_row)):
        weight = current_row[j]
        val = base_row[j]
        weight_sum += weight
        product_sum += weight * val
    # 处理权重和为0的特殊情况,避免除零报错
    weighted_mean = product_sum / weight_sum if weight_sum != 0 else 0
    # 追加均值到行末尾,保留6位小数匹配示例格式
    new_row = current_row + [round(weighted_mean, 6)]
    result.append(new_row)

# 追加原始第24行,逐行输出
result.append(matrix[23])
for row in result:
    print('  '.join(map(str, row)))

初学者注意点

  • 绝大多数编程语言的列表/数组索引都是从0开始,不要直接按日常计数的行号1-24取数,容易出现索引越界或者取错行的问题
  • 做除法前一定要判断分母(即权重总和)是否为0,否则程序会直接抛出除零错误崩溃
  • 原始数据列之间的空格数量不固定,分割行内容时直接按空白字符分割即可,不需要严格匹配空格数量
  • 如果需要更高精度的结果,可自行调整小数保留位数,示例中使用的6位小数可完全匹配给出的样例输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:33:16