如何编写一个接受两个平方矩阵(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] ]
答案 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吗? 它有#+运算符(模仿方法)。