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
相关产品推荐
相关产品推荐

