Added `static func diagonal(rows:columns:repeatedValue)` to `Matrix<Scalar>`

This commit is contained in:
Vincent Esche 2019-08-11 16:14:49 +02:00
parent 0e7264bb45
commit 805c28d844
1 changed files with 19 additions and 0 deletions

View File

@ -63,6 +63,25 @@ public struct Matrix<Scalar> where Scalar: FloatingPoint, Scalar: ExpressibleByF
self.grid = grid
}
public static func diagonal(rows: Int, columns: Int, repeatedValue: Scalar) -> Matrix<Scalar> {
let count = Swift.min(rows, columns)
let scalars = Swift.repeatElement(repeatedValue, count: count)
return self.diagonal(rows: rows, columns: columns, scalars: scalars)
}
public static func diagonal<T: Collection>(rows: Int, columns: Int, scalars: T) -> Matrix<Scalar> where T.Element == Scalar {
var matrix = self.init(rows: rows, columns: columns, repeatedValue: 0.0)
let count = Swift.min(rows, columns)
precondition(scalars.count == count)
for (i, scalar) in scalars.enumerated() {
matrix[i, i] = scalar
}
return matrix
}
public subscript(row: Int, column: Int) -> Scalar {
get {
assert(indexIsValidForRow(row, column: column))