Ruby 如何从矩阵[array]中获取平均值

Ruby 如何从矩阵[array]中获取平均值,ruby,matrix,average,ruby-1.8.7,Ruby,Matrix,Average,Ruby 1.8.7,(在开始之前,我使用的是Ruby 1.8.7,所以我不能使用新奇的东西。) 正如标题所说,我想计算列或行的平均值。 但是,我甚至找不到在线遍历/迭代数组矩阵形式的方法 假设你有这个 require 'mathn' m = Matrix[[1,2,3],[4,5,6],[7,8,9]] 不知何故,我迭代一个简单的3x3数组的方式不适用于矩阵形式的数组(或者可能只是我的代码很奇怪)…什么是正确的方法?此外,是否有计算矩阵行和列平均值的语法???这里有一种方法可以计算给定矩阵中特定行或列的平均值:

(在开始之前,我使用的是Ruby 1.8.7,所以我不能使用新奇的东西。)

正如标题所说,我想计算列或行的平均值。 但是,我甚至找不到在线遍历/迭代数组矩阵形式的方法

假设你有这个

require 'mathn'

m = Matrix[[1,2,3],[4,5,6],[7,8,9]]

不知何故,我迭代一个简单的3x3数组的方式不适用于矩阵形式的数组(或者可能只是我的代码很奇怪)…什么是正确的方法?此外,是否有计算矩阵行和列平均值的语法???

这里有一种方法可以计算给定矩阵中特定行或列的平均值:

require 'matrix'

m = Matrix[
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]
          ]

def vector_average(matrix, vector_type, vector_index)
  vector = matrix.send(vector_type, vector_index)
  vector.inject(:+) / vector.size.to_f
end

# Average of first row
vector_average(m, :row, 0)
# => 2.0

# Average of second column
vector_average(m, :column, 1)
# => 5.0

希望这有帮助

如果希望计算所有行平均值和/或所有列平均值,可以执行以下操作

require 'matrix'

def row_averages(m)
  (m * Vector[*[1.0/m.column_size]*m.column_size]).to_a
end

def col_averages(m)
  row_averages(m.transpose)
end
比如说,

m = Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

row_averages(m)
  #=> [2.0, 5.0, 8.0]
col_averages(m)
  #=> [3.9999999999999996, 5.0, 6.0]

请参阅和。

行大小
列大小
[i,j]
。。。方法(即使在1.8.7中),这应该足以计算您的平均值。你能告诉我们你试过什么吗?问题是你最后做的是整数除法吗。它们都在那里。您还可以编写
vector.inject(:+).fdiv(vector.size)
或(Ruby v2.4+)
vector.sum.fdiv(vector.size)
。这将使用或,具体取决于接收者的类(但我还没有检查这些方法是何时引入的)。