Как выполнить матричное умножение на рубине?

Привет всем, на моем курсе «Парадигмы программирования» мы только начали учиться программировать на 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-doc.org/stdlib-2.5.1/libdoc/matrix/rdoc/…

iGian 30.10.2018 21:19
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
1
397
1

Ответы 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.new.

Другие вопросы по теме