我们应该如何定义julia中的多维结构?

我们应该如何定义julia中的多维结构?,julia,Julia,我试图定义类似矩阵的结构。我应该如何定义它们?例如,定义如下矩阵: struct Mat r11::Float64 r12::Float64 r21::Float64 r22::Float64 end struct StaticMatrix{T, R, C, N} data::NTuple{N, T} end 但是当矩阵很大的时候,它不能这样写。如何定义多维矩阵,使其在进行加法、减法等运算时具有内存效率和速度。最好的方法是使用现有的矩阵。这是一个高质量

我试图定义类似矩阵的结构。我应该如何定义它们?例如,定义如下矩阵:

struct Mat
    r11::Float64
    r12::Float64
    r21::Float64
    r22::Float64
end
struct StaticMatrix{T, R, C, N}
    data::NTuple{N, T}
end

但是当矩阵很大的时候,它不能这样写。如何定义多维矩阵,使其在进行加法、减法等运算时具有内存效率和速度。

最好的方法是使用现有的矩阵。这是一个高质量、维护良好的包,它实现了类似矩阵的结构

staticarray
使用
NTuple
作为基础数据,这意味着它的长度可能会有所不同。其类型定义如下:

struct Mat
    r11::Float64
    r12::Float64
    r21::Float64
    r22::Float64
end
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)

最好的方法是使用已经存在的。这是一个高质量、维护良好的包,它实现了类似矩阵的结构

staticarray
使用
NTuple
作为基础数据,这意味着它的长度可能会有所不同。其类型定义如下:

struct Mat
    r11::Float64
    r12::Float64
    r21::Float64
    r22::Float64
end
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)

只需使用一个真正的
矩阵
?或者有一个字段,它是一个
矩阵
和一个定义为矩阵的结构。然后执行后者。查看该链接并获得灵感。只需使用真正的
矩阵
?或者有一个字段,它是一个
矩阵
和一个定义为矩阵的结构。然后执行后者。查看该链接并获取灵感。