我正在使用此Matrix类:http://ruby-doc.org/stdlib-2.0.0/libdoc/matrix/rdoc/Matrix.html
我以这种方式实例化:
@matrix = Matrix.build(3,3) { |row, col| Cell.new }
如何从两个对角线中获取元素?我发现我可以通过这种方式从左上角到右下角找到元素:
@matrix.each(:diagonal).to_a
但是我无法找到一种方法将右上角的元素放到左下角。
答案 0 :(得分:3)
对角线:
@matrix.square? && (0...@matrix.row_size).map { |i| @matrix[i, i] }
右上⇒左下对角线:
@matrix.square? && (0...@matrix.row_size).map do |i|
@matrix[i, @matrix.row_size - 1 - i]
end
检查@matrix.square?
确保对角线存在,毕竟。
答案 1 :(得分:3)
假设:
require 'matrix'
m = Matrix[[1,2,3],
[4,5,6],
[7,8,9]]
#=> Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
获得主对角线很容易。让它成为Matrix
方法。
class Matrix
def extract_diagonal
each(:diagonal).to_a
end
end
m.extract_diagonal
# => [1, 5, 9]
获得反对角线 1 的一种方法是将矩阵旋转“90度”,然后取该矩阵的主对角线。为了执行旋转,这是我在各种情况下发现的另一种Matrix
方法:
class Matrix
def rotate
Matrix[*to_a.map(&:reverse).transpose]
end
end
例如:
m.rotate
#=> Matrix[[3, 6, 9],
# [2, 5, 8],
# [1, 4, 7]]
因此m
的反对角线是:
m.rotate.extract_diagonal
#=> [3, 5, 7]
1。根据{{3}},从方形矩阵的左上角到右下角的对角线是“主对角线(有时是主对角线,主对角线,前导对角线或主要对角线)”,而对角线则是从右上角到左下角的是“反对角线(有时是对角线,次要对角线,尾随对角线或小对角线)”。