我正在尝试定义类似矩阵的结构。我应该如何定义它们?例如,定义这样的矩阵:
struct Mat
r11::Float64
r12::Float64
r21::Float64
r22::Float64
end
Run Code Online (Sandbox Code Playgroud)
但是,当矩阵很大时,就不能这样写。添加,减去等后,我应如何定义多维矩阵以提高存储效率并提高存储效率。
最好的方法是使用已经存在的StaticArrays
。这是一个高质量,维护良好的软件包,可实现类似Matrix的结构。
StaticArrays
使用一个NTuple
作为基础数据,这意味着它的长度可以变化。它的类型定义是这样的:
struct StaticMatrix{T, R, C, N}
data::NTuple{N, T}
end
Run Code Online (Sandbox Code Playgroud)
静态数组上的操作非常高效。例如:
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)
Run Code Online (Sandbox Code Playgroud)