I have a Matrix2
and Matrix3
type derived from StaticArrays.FieldMatrix
:
(Practice) julia> x = Matrix2(1, 2, 3, 4)
2×2 Matrix2{Int64} with indices SOneTo(2)×SOneTo(2):
1 3
2 4
(Practice) julia> y = Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9)
3×3 Matrix3{Int64} with indices SOneTo(3)×SOneTo(3):
1 4 7
2 5 8
3 6 9
I know Julia has some excellent matrix composition functions, and I’m wondering what would be the best way to create a new Matrix2
outer constructor method such that this is produced:
(Practice) julia> Matrix2(y)
2×2 Matrix2{Int64} with indices SOneTo(2)×SOneTo(2):
1 4
2 5
That is, it aligns a window of the 2x2 matrix over the the top left of the 3x3 matrix and extracts those elements, discarding the rest. I’m wondering if this can be done in a general fashion to work with other pairs of square matrices, rather than hard-coding the fields to extract for each constructor method.
I’ve been staring at the docs for a while and not seeing anything too useful here. reshape
requires the number of elements not to change. resize!
is for vectors. The only things that looked possibly relevant were SubArray
types and views into arrays, but I don’t know how to use them with immutable StaticArray types, if it’s even possible.
I need some pointers on what a general solution would be for a fixed set of square matrix types. Ideally I’d like one constructor that does the right thing based on the statically-known square matrix size, rather than writing separate methods with hard-coded fields to extract for each.
Any help would be appreciated. Thanks in advance.