У меня есть матрица с логическими значениями:
require 'matrix' m1 = Matrix[[0,1,1,1],[0,0,1,1],[1,1,1,1],[0,0,0,0]]
Я хочу найти строку с максимальным числом 1 с.Кто-нибудь может мне помочь?
1
Оптимизированное решение: - Начните проверку с верхнего правого угла и двигайтесь влево от матрицы, пока не получите 1.Когда встречается 0, пройдите вниз по матрице и повторите.
row = nil j = m1.row_count - 1 (0...m1.row_count).each.with_index do |i| while m1[i,j] == 1 do row = i j -= 1 end end puts row
Допущения: 1. Сортировка строк. 2. Это матрица nxn.
Подробнее см. this
m1.row_vectors.max_by(&:sum) #=> Vector[1, 1, 1, 1]
или
m1.to_a.max_by(&:sum) #=> [1,1,1,1]
в зависимости от требований.
Самый простой подход, вероятно, это
m1.row_vectors.max_by { |e| e.count(1) } #=> Vector[1, 1, 1, 1]