Julia中的高效单线计算“运行”总和?

时间:2015-04-25 22:11:06

标签: julia

是否有一种有效的方法可以在一行代码中在Julia中执行以下操作?

foldl((prev, x)-> [prev; prev[end] + x] , 0, block_lengths)

例如,

block_lengths = [2, 2, 2, 2, 3]

所需的输出是

[0, 2, 4, 6, 8, 11]

(我认为上面使用foldl的方式是低效的,因为我在每次迭代时连接了一个向量和一个整数。)

1 个答案:

答案 0 :(得分:4)

IIUC,您可以使用cumsum

julia> block_lengths = [2, 2, 2, 2, 3];

julia> cumsum(block_lengths)
5-element Array{Int32,1}:
  2
  4
  6
  8
 11

julia> [0; cumsum(block_lengths)]
6-element Array{Int32,1}:
  0
  2
  4
  6
  8
 11

应为O(N)。