julia - 在 Julia 中连接 ArrayViews(或 sliceviews 或 SubArrays)?

标签 julia

有没有办法在 Julia 中连接 ArrayViews,而不复制底层数据? (如果能解决问题,我也很乐意使用 SubArray。)

例如,在下面的代码中,我想要一个 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

这些方法可能不是最佳的,但它们肯定可以帮助您入门。为了有用,可能需要更多的方法。请注意,关键在于决定要索引到哪个成员数组。用于多维索引 sub2ind可以使用。

关于julia - 在 Julia 中连接 ArrayViews(或 sliceviews 或 SubArrays)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007902/

相关文章:

julia - Julia 中的 Refs 和 Broadcasting 之间有什么联系

debugging - 调试 Julia v.0.6

julia - 增加 Plots.jl 中子图之间的空间

arrays - Julia:更快的矩阵计算

geometry - 如何用 Julia 语言在球体上生成两组不同的点?

arrays - 具有多个范围的索引数组

dataframe - Julia 转换数据框列类型

c++ - 如何在 C++ 中使用 Julia 特殊函数

jupyter-notebook - Julia Pro : import Jupiter notebook

julia - Julia 中不可变对象(immutable对象)的地址