【问题标题】:How to perform a matrix multiplicaton on ruby?如何在红宝石上执行矩阵乘法?
【发布时间】:2018-10-30 19:58:46
【问题描述】:

大家好,在我的 Programming Paradigms 课程中,我们刚刚开始学习如何使用 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)

有人可以帮我吗? 提前谢谢你

【问题讨论】:

标签: ruby algorithm matrix matrix-multiplication


【解决方案1】:

这并不像你认为的那样:

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 呼叫发生了什么。

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多