新手问题 求多个相同大小的矩阵对应位置的最大值

bluexuemei · January 08, 2015 · Last by luikore replied at January 08, 2015 · 1951 hits

如题,怎么求多个相同大小的矩阵对应位置的最大值 例如: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
You need to Sign in before reply, if you don't have an account, please Sign up first.