是否有一种有效的方法可以在一行代码中在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
的方式是低效的,因为我在每次迭代时连接了一个向量和一个整数。)
答案 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)。