logo

Juliaでベクトルの累積和と累積積を計算する関数 📂Julia

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