Juliaでベクトルの累積和と累積積を計算する関数
コード
cumsum
関数名は累積合計(cumulative sum)の略である。イテレータを入力として受け取り、累積和を計算する。つまりベクトルを入れても良いが、単にレンジrangeを入れてもよい。2次元以上の場合は、合計を計算する次元を指定する必要がある。
julia> cumsum(1:10)
10-element Vector{Int64}:
1
3
6
10
15
21
28
36
45
55
julia> A = repeat(1:5, outer=(1,5))
5×5 Matrix{Int64}:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
julia> cumsum(A, dims=1)
5×5 Matrix{Int64}:
1 1 1 1 1
3 3 3 3 3
6 6 6 6 6
10 10 10 10 10
15 15 15 15 15
julia> cumsum(A, dims=2)
5×5 Matrix{Int64}:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
当然ながら、合計がうまく定義されない対象同士では、累積和を計算することはできない。
julia> cumsum(Any[1, 1.0])
2-element Vector{Any}:
1
2.0
julia> cumsum(A[1, 1.0; "1"])
ERROR: MethodError: no method matching typed_vcat(::Matrix{Int64}, ::Int64, ::Float64, ::String)
cumprod
cumsum
と似ており、累積積を計算する。積を計算するため、文字列を入力として受け取ることもできる。
julia> cumprod(1:5)
5-element Vector{Int64}:
1
2
6
24
120
julia> cumprod("abcde")
5-element Vector{String}:
"a"
"ab"
"abc"
"abcd"
"abcde"
julia> A
5×5 Matrix{Int64}:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
julia> cumprod(A, dims=1)
5×5 Matrix{Int64}:
1 1 1 1 1
2 2 2 2 2
6 6 6 6 6
24 24 24 24 24
120 120 120 120 120
julia> cumprod(A, dims=2)
5×5 Matrix{Int64}:
1 1 1 1 1
2 4 8 16 32
3 9 27 81 243
4 16 64 256 1024
5 25 125 625 3125
環境
- OS: Windows11
- Version: Julia 1.11.3