CentOS Stream 9における簡単なPythonスクリプト例
PyStan 3、OpenCV、PyGame
CentOS Stream 9において、PyStan 3、OpenCV、PyGameの簡単なスクリプトを試みてみた。CentOS Stream 9にAnacondaをインストールして、AnacondaにPython 3.11仮想環境を構築した。以下のプログラムの実行は、このPython 3.11仮想環境におけるものである。Anacondaのインストールについては、このウェブサイトで説明している。
以下、順番に報告する。
PyStan 3(Python用Stan)は、コマンド
pip install
pystan
によりインストールできる。
インストールしたPyStan 3の使用例として、リスト1のスクリプトを用意した。
リスト1 PyStan 3の使用例
import stan
import arviz as az
import matplotlib.pyplot as plt
stan_code = """
data
{
int
n;
int
k;
}
parameters
{
real<lower=0,
upper=1> p;
}
model
{
k
~ binomial(n, p);
}
"""
sm = stan.build(stan_code, data =
{'n':10, 'k':7})
fit = sm.sample()
i_fit = az.from_pystan(fit,
posterior_model=sm)
az.plot_trace(i_fit)
plt.tight_layout()
plt.show()
print('\nSummary...')
print(az.summary(i_fit))
リスト1のスクリプトを実行すると、Stanスクリプトが実行され、MCMCサンプリングのトレース図が、図1のように表示される。
図1
PyStanについては、岡本安晴「いまさら聞けないPythonでデータ分析」で説明しているが、バージョンはPyStan 2である。PyStan 3とPyStan 2の違いは、このウェブサイトなどで説明している。
PyStan 2は、AnacondaのPython 3.8仮想環境において、コマンド
conda install
pystan
により、インストールできる。
次のスクリプト
import pystan
import arviz
import matplotlib.pyplot as plt
bin_model = """
data
{
int
N;
int
k;
}
parameters
{
real<lower=0,
upper=1> p;
}
model
{
k
~ binomial(N, p);
}
"""
sm =
pystan.StanModel(model_code=bin_model)
fit = sm.sampling(data={'N':10,
'k':7})
print(fit)
arviz.plot_trace(fit)
plt.show()
を実行すると、次図のトレース図が表示される。
OpenCVは、コマンド
conda install
opencv
の実行でインストールできる。OpenCVの使用例をリスト2のように用意した。
リスト2 OpenCVの使用例
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = np.full((500, 800, 3), 255,
dtype=np.uint8)
cv2.rectangle(img, (100, 200), (700,
300), (0,0,0), 5)
cv2.circle(img, (400, 250), 200,
(0,0,0), 5)
plt.imshow(img)
plt.show()
リスト2のスクリプトを実行すると、図2のように描画図形が表示される。
図2
PyGameは、コマンド
pip install
pygame
によりインストールできる。
PyGameの使用例を、リスト3のように用意した。
リスト3 PyGameの使用例
import pygame as pg
import sys
import math
pg.init()
screen =
pg.display.set_mode((800,800))
screen.fill((0,0,0))
pg.display.flip()
ck = 0
dg = 0
clr = (255,0,0)
while True:
px
= 150 * math.sin(dg)
rect
= pg.Rect((400 - px, 200), (2*px,300))
screen.fill((0,0,0))
pg.draw.ellipse(screen,
clr, rect, 0)
pg.display.flip()
t0
= pg.time.get_ticks()
dg
+= 0.1
if
dg > math.pi:
dg
=0
if
ck == 0:
clr
= (0,255,0)
ck
= 1
else:
ck
= 0
clr
= (255,0,0)
while
True:
for
e in pg.event.get():
if
e.type == pg.QUIT:
pg.quit()
sys.exit()
if
pg.time.get_ticks() > t0 + 100:
break
リスト3のスクリプトを実行すると、図3のように円盤が表示される。この円盤は回転する。
図3