在Julia中连接阵列视图(或切片视图或子阵列)?

在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

有没有一种方法可以连接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 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

您看过吗?