如题,怎么求多个相同大小的矩阵对应位置的最大值 例如:a=[2 3 4 5;3 4 5 6;1 2 3 2;8 9 5 3] b=[1 1 1 5;4 5 2 3;6 5 6 3 ;7 4 9 7] 要求得到的结果矩阵是:c=[2 3 4 5;4 5 5 6; 6 5 6 3 ;8 9 9 7] 注意:要考虑效率问题,矩阵有可能很大,矩阵的个数不定
a = [ [2, 3, 4, 5], [3, 4, 5 ,6], [1, 2, 3, 2], [8, 9, 5, 3] ] b = [ [1, 1, 1, 5], [4, 5, 2, 3], [6, 5, 6, 3], [7, 4, 9, 7] ] c = a.map.with_index do |aa, i| aa.map.with_index do |aaa, j| aaa > b[i][j] ? aaa : b[i][j] end end
换个思路,把矩阵看成是 一维的 Array 后,再处理就更简单。
a =[ 2, 3, 4, 5, 3, 4, 5, 6, 1, 2, 3, 2, 8, 9, 5, 3 ] b =[ 1, 1, 1, 5, 4, 5, 2, 3, 6, 5, 6, 3, 7, 4, 9, 7 ] p a.zip(b).map &:max # => [2, 3, 4, 5, 4, 5, 5, 6, 6, 5, 6, 3, 8, 9, 9, 7]
#2 楼 @skandhas ,这个思路是不错,但是你最后要把一维转化为二维啊。还有如果矩阵有很多个,效率怎么样?
#3 楼 @bluexuemei 转化为二维的话,用 each_slice 处理一下就可。
建议在多看看 Ruby 基础方面的书。
二维的多个的...
[m1, m2, m3, m4, m5].inject do |a, b| a.zip(b).map{|x, y| x.zip(y).map &:max } end