一歩ずつ理解するPython累積和の7ステップ

Pythonの累積和を学ぶ初心者向けのイラストPython
この記事は約6分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonの学習を進める中で「累積和」という概念に遭遇することがあるでしょう。

ここでは、Pythonで累積和を理解し、活用するためのステップを初心者の皆さんに向けて解説します。

この記事を読むことで、Pythonの累積和の作り方から応用例まで、初心者でも一歩ずつ理解できるようになることでしょう。

●Pythonと累積和の基礎知識

○Pythonとは

Pythonは、初心者にとって親しみやすいプログラミング言語です。

シンプルな文法と豊富なライブラリが特徴で、データ解析やウェブ開発、AI開発など幅広い領域で活用されています。

また、学習曲線が緩やかで、プログラミング初心者が学びやすいという特長もあります。

○累積和とは

累積和とは、数列において、初項から任意の項までの和を新たな数列として生成する操作のことを指します。

例えば、数列[1,2,3,4,5]の累積和は[1,3,6,10,15]となります。

このように累積和は、数列の部分和を効率良く求めるための手段として使われます。

●Pythonでの累積和の作り方

累積和はPythonの標準ライブラリの一つであるitertoolsの中のaccumulate関数を使用することで簡単に計算できます。

○サンプルコード1:基本的な累積和の計算

from itertools import accumulate

# 数列を定義
numbers = [1, 2, 3, 4, 5]

# 累積和を計算
cumulative_sum = list(accumulate(numbers))

print(cumulative_sum)

このコードでは、Pythonの組み込みライブラリであるitertoolsからaccumulate関数をインポートし、その関数を使って数列の累積和を計算しています。

numbersは累積和を計算したい数列を定義しており、その数列をaccumulate関数に渡すことで累積和が計算されます。

計算結果はlist関数を使ってリストに変換され、最後にprint関数で出力されます。

このコードを実行すると、出力結果は[1, 3, 6, 10, 15]となります。

○サンプルコード2:二次元配列における累積和

累積和は一次元配列だけでなく、二次元配列に対しても計算できます。

この部分では、numpyのcumsum関数を使って二次元配列の累積和を求める方法を紹介します。

import numpy as np

# 二次元配列を定義
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 累積和を計算
cumulative_sum = np.cumsum(matrix, axis=0)

print(cumulative_sum)

このコードでは、numpyという数値計算ライブラリからcumsum関数を使用して二次元配列の累積和を計算しています。

matrixは二次元配列を定義しており、その配列に対してcumsum関数を適用します。

ここで、axis=0とすることで各列に対して累積和を求めています。

このコードを実行すると、出力結果は次のようになります。

[[ 1  2  3]
 [ 5  7  9]
 [12 15 18]]

この結果からわかるように、各列ごとに累積和が計算されています。

●累積和の応用例

累積和は、一見シンプルな操作に見えますが、その応用範囲は広範囲に及びます。

それでは、累積和の応用例としてデータの平均値を求める方法と、配列内の部分和の最大値を求める方法を紹介します。

○サンプルコード3:データの平均値を求める

from itertools import accumulate

# データを定義
data = [2, 4, 6, 8, 10]

# 累積和を計算
cumulative_sum = list(accumulate(data))

# 平均値を計算
average = [sum_val / (idx + 1) for idx, sum_val in enumerate(cumulative_sum)]

print(average)

このコードでは、まず累積和を求め、その結果を元に平均値を計算しています。

平均値の計算はリスト内包表記を用いて行われています。各要素の累積和をその位置までの要素数で割ることで平均値を求めています。

このコードを実行すると、出力結果は[2.0, 3.0, 4.0, 5.0, 6.0]となります。

○サンプルコード4:配列内の部分和の最大値を求める

累積和は、配列内の部分和の最大値を効率よく求めるのにも使えます。

from itertools import accumulate

# 配列を定義
array = [-2, 1, -3, 4, -1, 2, 1, -5, 4]

# 累積和の最小値と最大値を初期化
min_cumulative_sum = max_cumulative_sum = 0

# 累積和の最小値を更新しながら最大値を探す
for val in accumulate(array):
    min_cumulative_sum = min(min_cumulative_sum, val)
    max_cumulative_sum = max(max_cumulative_sum, val - min_cumulative_sum)

print(max_cumulative_sum)

このコードでは、累積和の最小値(min_cumulative_sum)と最大値(max_cumulative_sum)を初期化し、その後、累積和を計算しながらその最小値を更新し、同時に最大値も更新しています。

その結果、最終的なmax_cumulative_sumは、配列内の部分和の最大値となります。

このコードを実行すると、出力結果は6となります。

●累積和に関する注意点と対処法

累積和を計算する際の注意点は、数列の数が非常に大きい場合や、数値が非常に大きい場合にオーバーフローが起こりうるという点です。

この問題を避けるためには、累積和を求める際に適宜剰余を取る、あるいは数値のスケールを適切に調整するなどの対策が必要となります。

●累積和のカスタマイズ方法

累積和は、基本的な加算だけでなく、カスタマイズした計算にも対応可能です。

matplotlibライブラリを用いて累積和の計算結果を可視化する方法を紹介します。

○サンプルコード5:累積和の計算結果を可視化する

from itertools import accumulate
import matplotlib.pyplot as plt

# 数列を定義
numbers = [1, 2, 3, 4, 5]

# 累積和を計算
cumulative_sum = list(accumulate(numbers))

# 累積和をプロット
plt.plot(cumulative_sum)
plt.title("Cumulative Sum")
plt.xlabel("Index")
plt.ylabel("Sum")
plt.grid(True)
plt.show()

このコードでは、Pythonの視覚化ライブラリであるmatplotlibを使って累積和の計算結果をグラフ化しています。

このコードを実行すると、Y軸に累積和、X軸に数列のインデックスをとった折れ線グラフが表示されます。

このように累積和を視覚的に表現することで、その変化を直感的に理解することが可能となります。

まとめ

Pythonにおける累積和の計算方法から応用例までを一歩ずつ解説しました。

累積和はデータ解析やアルゴリズムの中で非常に重要な概念であり、その理解と活用はPythonプログラミングスキルの向上につながります。

今回学んだ知識をぜひ活用してみてください。