我有一个数组b = [1, 2, 1, 4]
。这些值可以改变。我需要使用SharedArray
Tuples
创建b[i]
Int
个。{/ p>
换句话说,如果我需要b = [1, 2, 1, 4]
:
x = SharedArray{Tuple{Int}, Tuple{Int,Int}, Tuple{Int}, Tuple{Int,Int,Int,Int}}
我不能为我的生活弄清楚如何。有什么想法吗?
答案 0 :(得分:1)
SharedArray
只能包含Tuple
Vararg
不是......的比特类型,而是@ halirutan的编码理念草案将元组变成平面阵列:
immutable SharedThing{T}
data::SharedArray{T}
strides::Vector{Int}
end
function SharedThing{T}(tuples::Tuple{Vararg{T}}...)
strides = collect(map(length, tuples))
data = SharedArray(T, sum(strides))
i = 1
for (s, t) in zip(strides, tuples)
data[i:i+s-1] = collect(t)
i += s
end
SharedThing{T}(data, strides)
end
function Base.getindex{T}(xs::SharedThing{T}, i)
before = sum(xs.strides[1:i-1])
tuple(xs.data[before+1:before + xs.strides[i]]...)
end
所以:
julia> xs = SharedThing((1, 2,3), (22, 33))
SharedThing{Int64}([1,2,3,22,33],[3,2])
julia> xs[1]
(1,2,3)
julia> xs[2]
(22,33)
当然,这是可以优化的,不注意为并行性获得良好的共享结构,我也担心它的类型处理不是最理想的......但是,它仍然可以作为基础为你服务。