Angenommen:
require 'matrix'
m = Matrix[[1,2,3],
[4,5,6],
[7,8,9]]
#=> Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
die Hauptdiagonale zu erhalten ist einfach. Lass es uns eine Matrix
Methode machen.
class Matrix
def extract_diagonal
each(:diagonal).to_a
end
end
m.extract_diagonal
# => [1, 5, 9]
Eine Möglichkeit, die antidiagonal 1 zu erhalten, ist die Matrix „90 Grad“ zu drehen und dann die Hauptdiagonale dieser Matrix. Um die Drehung ausführen, hier ist eine andere Matrix
Methode, die ich habe in verschiedenen Situationen nützlich gefunden:
class Matrix
def rotate
Matrix[*to_a.map(&:reverse).transpose]
end
end
Zum Beispiel:
m.rotate
#=> Matrix[[3, 6, 9],
# [2, 5, 8],
# [1, 4, 7]]
Die antidiagonal von m
ist daher:
m.rotate.extract_diagonal
#=> [3, 5, 7]
1. Nach Wiki ist die Diagonale, die von oben links nach unten rechts einer quadratischen Matrix verläuft, die "ma in Diagonale (manchmal Hauptdiagonale, Hauptdiagonale, Hauptdiagonale oder Hauptdiagonale), während die Diagonale, die von oben rechts nach unten links geht, die "antidiagonale (manchmal gegendiagonale, sekundäre Diagonale, hintere Diagonale oder kleine Diagonale)" ist.