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

Ruby 1.8.7中如何计算矩阵的行/列平均值

嘿,针对Ruby 1.8.7里Matrix类的遍历和行平均值计算问题,我给你整理了具体的解决方法,都是适配旧版本的写法,不用高级特性~

遍历Matrix对象的正确方式

Ruby 1.8.7的Matrix类和普通二维数组的遍历逻辑不同,你可以用以下两种核心方式处理:

  • 按行遍历:使用row_vectors方法获取所有行的向量集合,每个向量可以通过to_a转成普通数组操作;也可以用row(i)直接获取指定索引的行(索引从0开始):
require 'mathn'
m = Matrix[[1,2,3],[4,5,6],[7,8,9]]

# 遍历所有行
m.row_vectors.each do |row|
  puts row.to_a.inspect # 依次输出 [1,2,3]、[4,5,6]、[7,8,9]
end

# 获取指定行
puts m.row(1).to_a # 输出 [4,5,6]
  • 按列遍历:类似行的处理,用column_vectors获取所有列的向量集合,或column(i)直接取指定列:
# 遍历所有列
m.column_vectors.each do |col|
  puts col.to_a.inspect # 依次输出 [1,4,7]、[2,5,8]、[3,6,9]
end

# 获取指定列
puts m.column(2).to_a # 输出 [3,6,9]
计算行/列平均值的实现

Ruby 1.8.7的Matrix类没有内置的平均值计算方法,但我们可以基于上面的遍历逻辑自己实现,完全适配旧版本:

行平均值

def row_averages(matrix)
  matrix.row_vectors.map do |row|
    # 求和后转浮点数,避免Ruby 1.8.7整数除法取整的问题
    row.to_a.inject(:+).to_f / row.size
  end
end

# 调用示例
m = Matrix[[1,2,3],[4,5,6],[7,8,9]]
puts row_averages(m).inspect # 输出 [2.0, 5.0, 8.0]

列平均值

只需要把遍历对象换成列向量即可:

def column_averages(matrix)
  matrix.column_vectors.map do |col|
    col.to_a.inject(:+).to_f / col.size
  end
end

puts column_averages(m).inspect # 输出 [4.0, 5.0, 6.0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:10