Julia - 根据向量重塑数组

Julia - Reshaping an array according to a vector

我有一个数组,一个

49455-element Array{Array{AbstractString,1},1}

长度各不相同,这只是众多可能性中的一种

我需要做一个 b = vcat(a...) 给我

195158-element Array{AbstractString,1}:

并将其转换为 SharedArray,让所有内核都处理其中的字符串(我将转换为 curtians 后面的 Char 矩阵,但这并不重要)

在a中,每个元素都是一些字符串的数组,我就是这样做的

map(x -> length(x), a)
49455-element Array{Int64,1}:
  1
  4
  8
  .
  .
  2

有没有办法可以轻松地将数组 b 恢复到与 a 相同的维度?

作为对 Dan Getz 答案的补充,我们还可以使用 zip 而不是 Iterators.jl 的 partition:

tails = cumsum(map(length,a))
heads = [1;tails+1][1:end-1]
newa = [b[i:j] for (i,j) in zip(heads,tails)]

使用 Iterators.jl 包:

# `a` holds original. `b` holds flattened version. `newa` should == `a`

using Iterators            # install using Pkg.add("Iterators")
lmap = map(length,a)       # same length vector defined in OP

newa = [b[ib+1:ie] for (ib,ie) in partition([0;cumsum(lmap)],2,1)]

这有点简洁,也可用于为原始向量生成生成器,但 for 循环实现应该同样快速和清晰。