Table of Contents
やりたいこと
任意の正の実数 $x$ に対して,
\[\Gamma(x+1) = x\Gamma(x)\]というガンマ関数の性質をmath.gamma
を用いずに表現したい.
具体的には, index 0 の値が 1
から始まる任意の長さの等差 1
の数列を表現する array
が
input
として与えられたら
1
2
def compute_cumprod(array):
return [reduce(a * (b-1), array[:i]) for i in range(1, len(array)+1)]
と同じ結果が返ってくる関数をもっとうまい表現で書くことがゴールです.
itertools.accumulate
を用いた関数定義
1
2
3
4
5
6
7
8
from itertools import accumulate
def compute_cumprod(array):
return list(accumulate(array, lambda a, b: a*(b-1)))
x_array = np.arange(1, 6)
compute_cumprod(x_array)
>>> [1, 1, 2, 6, 24]
itertools.accumulate
はどんな関数なのか?
accumulate
は, 第2引数として関数を受け付け, この引数が要素を一つにまとめた値を計算する際に使われます.
なお, この関数は2個の引数を受け付け, 1個の値を返すものでなければなりません.
ループ系の関数が呼び出されるような時, 状態を記憶しながら要素の反復処理をし, 更にその結果をリストとして返してくれる関数という 理解を僕はしています.
第2引数をしてしなかった場合は加算処理を返す
1
2
3
4
from itertools import accumulate
import numpy as np
print(list(accumulate(np.arange(1, 10, 2))))
>>> [1, 4, 9, 16, 25]
References
stack overflow
統計
Python
math
Linux
Ubuntu 20.04 LTS
Shell
English
git
方法論
Ubuntu 22.04 LTS
統計検定
競技プログラミング
フーリエ解析
前処理
SQL
coding
コミュニケーション
Network
ssh
将棋
Data visualization
Docker
Econometrics
VSCode
statistical inference
GitHub Pages
apt
development
システム管理
Coffee
cloud
数値計算
素数
Book
Font
Metrics
Poetry
Ubuntu 24.04 LTS
architecture
aws
shell
systemctl
テンプレート
データ構造
ポワソン分布
会計分析
文字コード
環境構築
論文
App
Bayesian
Dynamic Programming
Keyboard
Processing
R
Steam
filesystem
quarto
regex
(注意:GitHub Accountが必要となります)