如何对 Ruby 数组执行逐元素乘法?

How can I perform element-wise multiplication for Ruby arrays?

课程、学分和分数是 Ruby 个大小相等的数组。

gpa = (([credits, courses, points].transpose.map {|x| x.reduce(:*)}).inject{|sum,x| sum + x }).round(2)

此方法在我尝试 运行 时提示错误消息。

错误信息:

in 'each': undefined method '*' for nil:NilClass (NoMethodError)

从报错信息来看,好像有部分数据是nil.

也许您可以尝试将数据强制为浮点数。

这并不理想,因为您最终可能会出现静默错误,但值得一试。

尝试:

[credits, courses, points].transpose.map {|a| a.map {|n| n.to_f} } .map { |x| x.reduce(:*) } .inject{|sum, x| sum + x} .round(2)

即使是字符串和奇怪的数据,它也适用于我(尽管不兼容的数据只是简单地转换为零,影响了数学)。