Лучший способ - использовать уже существующие StaticArrays
. Это высококачественный, хорошо обслуживаемый пакет, который реализует структуры, подобные матрице.
StaticArrays
использует NTuple
в качестве базовых данных, что означает, что они могут различаться по длине. Его определение типа выглядит примерно так:
struct StaticMatrix{T, R, C, N}
data::NTuple{N, T}
end
Операции со статическими массивами чрезвычайно эффективны. Например:
julia> using StaticArrays
julia> a = SMatrix{2,2}(rand(4));
julia> code_native(+, Tuple{typeof(a), typeof(a)}, debuginfo=:none)
.text
vmovupd (%rsi), %ymm0
vaddpd (%rdx), %ymm0, %ymm0
vmovupd %ymm0, (%rdi)
movq %rdi, %rax
vzeroupper
retq
nopw %cs:(%rax,%rax)