如何在红宝石上执行矩阵乘法?

时间:2018-10-30 19:58:46

标签: ruby algorithm matrix matrix-multiplication

在我的“编程范例”课程中,大家好,我们才刚刚开始学习如何用ruby编程。一项练习要求实现一个将两个矩阵相乘的函数。

通常使用Java,我尝试过考虑制作三个二维数组,这就是我尝试对两个矩阵2x2实现它的方法:

def matrixmultiplicator(first_matrix, second_matrix)
    result_matrix = [][]
    first_matrix.each_index do |i|
        second_matrix[i].each_index do |j|
            sum = 0
            //This loop range is just a test for two 2x2 matrices
            (0..1).each do |k|
                sum = sum +(first_matrix[i][j+k] * second_matrix[j+k][i])
            end
        result_matrix[i][j] = sum
        end
    end
end

matrixmultiplicator([[1, 2], [3, 4]], [[2, 3], [3, 3]])

不幸的是,我收到这个错误: 参数数量错误(给定0,应为1..2)(ArgumentError)

有人可以帮我吗? 预先谢谢你

1 个答案:

答案 0 :(得分:0)

这不符合您的预期:

result_matrix = [][]

试图在空数组上调用“数组索引方法”([]),但没有将任何参数传递给[]方法。运算符只是Ruby中带有某种语法糖的方法,因此[][]大致等同于:

empty_array = []
empty_array.[]()

其中.[]是对[]方法的调用(就像obj.m是对m方法的调用),而()是一个空参数列表。

Ruby(像大多数语言一样)不具有多维数组,它具有数组数组,因此您可以在第一次需要它们时创建内部数组:

result_matrix = [ ]
#...
result_matrix[i]  ||= [ ]
result_matrix[i][j] = sum

代替

result_matrix[i][j] = sum

或者您可以预填充result_matrix

result_matrix = Array.new(2) { [ ] }

请参见Array constructor docs,以了解Array.new调用的情况。