我目前正在努力在 Julia 中创建一个子类型AbstractArray,它允许您除了数组本身之外还存储向量。您可以将其视为“名称”列,其中元素类型作为 的子类型AbstractFloat。因此,它与NamedArray.jl包有一些相似之处,但仅限于仅使用浮点数分配列(如果是矩阵)。
到目前为止,我创建的结构(按照创建 的子类型的指南AbstractArray)定义如下:
struct FooArray{T, N, AT, VT} <: AbstractArray{T, N}
data::AT
vec::VT
function FooArray(data::AbstractArray{T1, N}, vec::AbstractVector{T2}) where {T1 <: AbstractFloat, T2 <: AbstractFloat, N}
length(vec) == size(data, 2) || error("Inconsistent dimensions")
new{T1, N, typeof(data), typeof(vec)}(data, vec)
end
end
@inline Base.@propagate_inbounds Base.getindex(fooarr::FooArray, i::Int) = getindex(fooarr.data, i)
@inline Base.@propagate_inbounds Base.getindex(fooarr::FooArray, I::Vararg{Int, 2}) = getindex(fooarr.data, I...)
@inline Base.@propagate_inbounds Base.size(fooarr::FooArray) = size(fooarr.data)
Base.IndexStyle(::Type{<:FooArray}) = IndexLinear()
Run Code Online (Sandbox Code Playgroud)
这似乎已经足以创建类型的对象fooArray并用它做一些简单的数学运算。然而,我发现一些基本函数(例如矩阵向量乘法)似乎不精确。例如,以下内容应始终返回 的向量0.0,但是: …