No hay una forma incorporada de Ruby de hacer esto. Sin embargo, he creado un Módulo que se puede incluir en Matrix que incluye un método readable
. Puede encontrar este código here, pero también está en el siguiente bloque de código.
require 'matrix'
module ReadableArrays
def readable(factor: 1, method: :rjust)
repr = to_a.map { |row|
row.map(&:inspect)
}
column_widths = repr.transpose.map { |col|
col.map(&:size).max + factor
}
res = ""
repr.each { |row|
row.each_with_index { |el, j|
res += el.send method, column_widths[j]
}
res += "\n"
}
res.chomp
end
end
## example usage ##
class Matrix
include ReadableArrays
end
class Array
include ReadableArrays
end
arr = [[1, 20, 3], [20, 3, 19], [-32, 3, 5]]
mat = Matrix[*arr]
p arr
#=> [[1, 20, 3], [20, 3, 19], [-2, 3, 5]]
p mat
#=> Matrix[[1, 20, 3], [20, 3, 19], [-2, 3, 5]]
puts arr.readable
#=>
# 1 20 3
# 20 3 19
# -32 3 5
puts mat.readable
#=>
# 1 20 3
# 20 3 19
# -32 3 5
puts mat.readable(method: :ljust)
#=>
# 1 20 3
# 20 3 19
# -32 3 5
puts mat.readable(method: :center)
#=>
# 1 20 3
# 20 3 19
# -32 3 5
Definitivamente revisaré SciRuby/NMatrix. Soy nuevo en Ruby, así que esperaba usarlo para un proyecto de posgrado para aprender un poco más. El hecho de que la matriz estándar en Ruby sea inmutable me provocó el abandono de C#. No sabía si libs de terceros volaría con mi profesor y estaba en una crisis. Además, nos graduamos el mismo año en VT, fue genial ver que estás en UT. Yo era Math/CS y podría estar interesado en prestarle a su proyecto, le enviaré un mensaje. – vpiTriumph