我有两个数组:
a = [[1,2],[3,4]];
b = [[5,6],[7,8]];
我希望得到的数组是它们的总和,即
c = [[6,8],[10,12]];
会有一种优雅的方式来做到这一点吗?
笔记:
我目前知道,只需添加a = [1,2]
withb = [3,4]
即可获得c = [4,6]
我需要做的事情
c = [a,b].transpose.map{|x| x.reduce(:+)};
但如果可能的话,我不确定如何将其扩展到我的问题。
我有两个数组:
a = [[1,2],[3,4]];
b = [[5,6],[7,8]];
我希望得到的数组是它们的总和,即
c = [[6,8],[10,12]];
会有一种优雅的方式来做到这一点吗?
笔记:
我目前知道,只需添加a = [1,2]
withb = [3,4]
即可获得c = [4,6]
我需要做的事情
c = [a,b].transpose.map{|x| x.reduce(:+)};
但如果可能的话,我不确定如何将其扩展到我的问题。
a.zip(b).map { |x,y| x.zip(y).map { |s| s.inject(:+) } }
c = [a, b].transpose.map{|ary| ary.transpose.map{|ary| ary.inject(:+)}}
另一种可以更好地表达操纵数字的方法是使用“narray”
require 'narray'
a = NArray[[1,2],[3,4]]
b = NArray[[5,6],[7,8]]
c = a + b
. . . 是的,真的,c = a + b
而且速度也快得多。
不过,您确实为此付出了代价 - NArray 期望所有元素都包含相同类型的对象。如果是这种情况,尤其是如果您的实际问题具有更大的矩阵,那么我强烈建议narray
您处理此类数据