1から100までの足し算を視覚的に簡単にしてみる。
かの偉大な数学者ガウスは1から100までの値をすべて足すという課題を
1+100=101
2+99=101
…
50+51=101
101 *50 = 5050
と計算し、101 *50 = 5050と一瞬で計算したそうです。すごいですね。
つまり51以上の数をreverse
することで列ごとの差分を打ち消し、計算を単純化させたということですね。
幼少期のガウスにグラフの概念があったのかどうか定かではありませんが、
グラフで見るとどういう感じで捉えることになるのか実験してみました。
Pythonで1-50,51-100までの数値のリストを作成
calc.py
import numpy as np
import matplotlib.pyplot as plt
# 1から100までの各要素を作成しreshapeで2行へ
nums = np.arange(1, 101, 1).reshape(2, -1)
# 50以下をlow,51以上をhighへ代入
low = nums[0:1].flatten()
# highはリバース
high = nums[1:2, ::-1].ravel()
fig, axe = plt.subplots(1, 2, constrained_layout=True, figsize=(12, 5), sharey=True)
axe[0].plot(low)
axe[0].set_title('low')
axe[1].plot(high)
axe[1].set_title('high')
ちょっとわかりにくいですが、斜辺の傾きが左右打ち消しあえそうなのがわかります。
ガウスがやったような計算方法で算出したグラフを足してみます。
各列の合計値のグラフを足してみる
calc.py
sum_len = []
for i, j in zip(low, high):
sum_len.append(i + j)
plt.plot(sum_len, label="sum")
plt.legend()
high
とlow
を足したsum
が各列ごとに101になっているのが確認できます。そして棒グラフにしてみます。
棒グラフにしてみる
calc.py
x_axis=np.arange(1,51,1)
plt.bar(x_axis, high, bottom=low, label='higher')
plt.bar(x_axis, low, label='lower')
plt.legend()
最初からこれを作成すればわかりやすかったですね笑。
グラフにすることで数字の両端同士を足すとどの列も101になるのが直感的にわかるようになりました。