如何将两个矩阵相加?

时间:2014-08-17 12:16:57

标签: ruby matrix

如何编写一个接受两个平方矩阵(nxn二维数组)的方法,并返回两者之和。传递给方法的两个矩阵的大小都是nxn(平方),只包含整数。

如何将两个矩阵求和: 从第一个矩阵中取出每个单元格[n] [m],并将其与第二个矩阵中的[n] [m]单元格相加。这将是解决方案矩阵中的cell [n] [m]。

像:

|1 2 3|
|3 2 1|
|1 1 1|
+
|2 2 1|
|3 2 3|
|1 1 3|
=
|3 4 4|
|6 4 4|
|2 2 4|



matrix_addition( [ [1, 2, 3], [3, 2, 1,], [1, 1, 1] ], [ [2, 2, 1], [3, 2, 3], [1, 1, 3] ] )
returns [ [3, 4, 4], [6, 4, 4], [2, 2, 4] ]

3 个答案:

答案 0 :(得分:6)

尽管可以定义这样做的方法,但在Matrix库中使用ruby构建要容易得多:

require 'matrix'

m1 = Matrix[ [1, 2, 3], [3, 2, 1], [1, 1, 1] ]
m2 = Matrix[ [2, 2, 1], [3, 2, 3], [1, 1, 3] ]

sum = m1 + m2

答案 1 :(得分:2)

是的,当然,使用Matrix类方法,但这是一种使用可能感兴趣的递归的方法。

<强>代码

def sum_arrays(a1, a2)
  t = a1.zip(a2)
  t.map { |e1,e2| (e1.is_a? Array) ? sum_arrays(e1,e2) : e1+e2 }
end

<强>实施例

a1 = [1,2,3]
a2 = [4,5,6]
sum_arrays(a1, a2)
  #=> [5, 7, 9]

a1 = [[1,2,3], [4,5]]
a2 = [[6,7,8], [9,10]]
sum_arrays(a1, a2)
  #=> [[7, 9, 11], [13, 15]]

a1 = [[[ 1,  2,  3], [ 4,  5]],
      [[ 6,  7], [ 8,  9, 10]]] 
a2 = [[[11, 12, 13], [14, 15]],
      [[16, 17], [18, 19, 20]]]
sum_arrays(a1, a2)
 #=> [[[12, 14, 16], [18, 20]],
 #    [[22, 24], [26, 28, 30]]]

<强>概括

您可以通过传递运算符来更多地使用此方法。

<强>代码

def op_arrays(a1, a2, op)
  t = a1.zip(a2)
  t.map { |e1,e2| (e1.is_a? Array) ? op_arrays(e1,e2,op) : e1.send(op,e2) }
end

<强>实施例

a1 = [[1,2,3], [4,5]]
a2 = [[6,7,8], [9,10]]

op_arrays(a1, a2, '+') #=> [[7, 9, 11], [13, 15]]
op_arrays(a1, a2, '-') #=> [[-5, -5, -5], [-5, -5]]
op_arrays(a1, a2, '*') #=> [[6, 14, 24], [36, 50]]

您也可以将运算符作为符号传递:

op_arrays(a1, a2, :+)
  #=> [[7, 9, 11], [13, 15]]

答案 2 :(得分:0)

你使用过红宝石Matrix class吗? 它有#+运算符(模仿方法)。