在Julia中连接阵列视图(或切片视图或子阵列)?
有没有一种方法可以连接Julia中的ArrayView,而不复制底层数据?(如果能解决问题,我也很乐意使用子阵列。) 例如,在下面的代码中,我想要一个引用在Julia中连接阵列视图(或切片视图或子阵列)?,julia,Julia,有没有一种方法可以连接Julia中的ArrayView,而不复制底层数据?(如果能解决问题,我也很乐意使用子阵列。) 例如,在下面的代码中,我想要一个引用y1和y2中数据的数组视图 julia> x = [1:50]; julia> using ArrayViews; julia> y1 = view(x, 2:5); julia> y2 = view(x, 44:48); julia> concat(y1, y2) # I wish there were
y1
和y2
中数据的数组视图
julia> x = [1:50];
julia> using ArrayViews;
julia> y1 = view(x, 2:5);
julia> y2 = view(x, 44:48);
julia> concat(y1, y2) # I wish there were a function like this
ERROR: concat not defined
julia> [y1, y2] # This copies the data in y1 and y2, unfortunately
9-element Array{Int64,1}:
2
3
4
5
44
45
46
47
48
不直接。但你也可以用类似的方式推出你自己的类型:
julia> type CView{A<:AbstractArray} <: AbstractArray
a::A
b::A
end
julia> import Base: size, getindex, setindex!
julia> size(c::CView) = tuple([sa+sb for (sa, sb) in zip(size(c.a), size(c.b))]...)
size (generic function with 57 methods)
julia> getindex(c::CView, i::Int) = i <= length(c.a) ? getindex(c.a, i) : getindex(c.b, i)
getindex (generic function with 180 methods)
julia> c = CView(y1, y2);
julia> size(c)
(9,)
julia> c[1]
2
julia> c[4]
5
julia> c[5]
48
julia>键入CView{A size(c::CView)=tuple([sa+sb代表zip中的(sa,sb)(size(c.A),size(c.b))]…)
大小(具有57种方法的通用函数)
julia>getindex(c::CView,i::Int)=ic=CView(y1,y2);
朱莉娅>尺寸(c)
(9,)
julia>c[1]
2.
julia>c[4]
5.
julia>c[5]
48
这些方法可能不是最优的,但它们肯定可以帮助您开始。要想有用,可能需要更多的方法。请注意,关键在于决定要索引到哪个成员数组。对于多维索引,可以使用sub2ind
。您看过吗?