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
循环实现应该同样快速和清晰。
我有一个数组,一个
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
循环实现应该同样快速和清晰。