Julia-根据向量重塑数组

Julia-根据向量重塑数组,julia,reshape,Julia,Reshape,我有一个数组,一个 49455-element Array{Array{AbstractString,1},1} 长度不同,这只是众多可能性之一 我需要做一个b=vcat(a…)给我 195158-element Array{AbstractString,1}: 并将其转换为SharedArray,让所有核心都处理其中的字符串(我将转换为curtians后面的字符矩阵,但这并不重要) 在a中,每个元素都是由一定数量的字符串组成的数组,我就是这么做的 map(x -> length(x)

我有一个数组,一个

49455-element Array{Array{AbstractString,1},1}
长度不同,这只是众多可能性之一

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

195158-element Array{AbstractString,1}:
并将其转换为SharedArray,让所有核心都处理其中的字符串(我将转换为curtians后面的字符矩阵,但这并不重要)

在a中,每个元素都是由一定数量的字符串组成的数组,我就是这么做的

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

是否有一种方法可以轻松地将数组b解析为a的相同维度?

作为Dan Getz答案的补充,我们也可以使用
zip
而不是迭代器。jl的
分区

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)]

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

是否尝试使用长度大于1的向量?@DanGetz
cumsum
就是我要找的。就是在午夜如此草率;)