如何对二维数组求和

问题描述 投票:0回答:3

我有一个二维数组=

[[12,34,35,21],[10,14,23,17],...]
无穷大。

我想用 ruby 来做这件事;

arr1 = [array[0][0]+array[1][0]+array[n+1][0]...,
array[0][1]+array[1][1]+array[n+1][1]...,
array[0][2]+array[1][2]+array[n+1][2]...,
array[0][3]+array[1][3]+array[n+1][3]...] 

结果 (4x4)

arr1 = [[12+10+..],[34+14+..],[35+23..],[21+17+..]]

有什么想法吗?

ruby matrix multidimensional-array sketchup
3个回答
7
投票

您可以使用Array#transpose,然后对每个单独的数组进行求和

array = [[12,34,35,21],[10,14,23,17]]

array.transpose.map {|a| a.inject(:+) }
# => [22, 48, 58, 38]

如果您使用的是 Ruby 2.4 或更高版本,则可以使用 Array#sum 方法

array.transpose.map(&:sum)
# => [22, 48, 58, 38] 

对于输出为一个或多个数组,

array.transpose.map {|a| [a.sum] }
# => [[22], [48], [58], [38]] 

1
投票

我刚刚写了 ruby 代码

h = Hash.new(0)
arr =  [[12, 34, 35, 21], [10, 14, 23, 17], [1, 2, 3]]  #Any size of nested array
arr.each do |a|
  a.each_with_index do |n,i|
    h[i]+=n
  end
end
h.values.map{|a| [a]}

希望有帮助


0
投票

您还可以使用标准库中的

Matrix
。这还有一个额外的好处,那就是可以处理额外的维度。

require "matrix"

array_of_arrays = [
  [12, 34, 35, 21],
  [10, 14, 23, 17],
  # ...
]

matrices = array_of_arrays.map { |array| Matrix[array] }
summed_matrix = matrices.inject { |memo, matrix| memo + matrix }

puts summed_matrix # => Matrix[[22, 48, 58, 38]]
© www.soinside.com 2019 - 2024. All rights reserved.