我们应该如何定义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)
只需使用一个真正的
矩阵
?或者有一个字段,它是一个矩阵
和一个定义为矩阵的结构。然后执行后者。查看该链接并获得灵感。只需使用真正的矩阵
?或者有一个字段,它是一个矩阵
和一个定义为矩阵的结构。然后执行后者。查看该链接并获取灵感。