Julia -根据矢量重塑数组

  • 本文关键字:数组 -根 Julia julia reshape
  • 更新时间 :
  • 英文 :


我有一个数组的数组,a

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

长度变化,这只是许多可能性之一

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

195158-element Array{AbstractString,1}:

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

在a中,每个元素都是一个包含一定数量字符串的数组,我这样做

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

是否有一种方法可以很容易地将数组b恢复到与a相同的维度?

使用迭代器。杰包:

# `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循环的实现应该同样快速和清晰。

作为对Dan Getz答案的补充,我们也可以使用zip代替Iterators。jl's partition:

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

相关内容

  • 没有找到相关文章

最新更新