NumPy:格子と乱数
2次元格子の生成と乱数をまとめる. パラメトリック曲面(P2-01)や,2次元の場・初期値の設定(P2-03)で用いる.
import numpy as npmeshgrid(2次元格子)¶
np.meshgrid は,2本の1次元配列から平面上の格子点の座標を作る.
パラメトリック曲面(P2-01)や2次元の場(P2-03)を扱うときに不可欠である.
x = np.linspace(0, 1, 3)
y = np.linspace(2, 3, 4)
xmesh, ymesh = np.meshgrid(x, y)
print("xmesh:\n", xmesh)
print("ymesh:\n", ymesh)
print("形状:", xmesh.shape) # (len(y), len(x))xmesh:
[[0. 0.5 1. ]
[0. 0.5 1. ]
[0. 0.5 1. ]
[0. 0.5 1. ]]
ymesh:
[[2. 2. 2. ]
[2.33333333 2.33333333 2.33333333]
[2.66666667 2.66666667 2.66666667]
[3. 3. 3. ]]
形状: (4, 3)
xmesh と ymesh の同じ位置を組にすると,すべての格子点 (x, y) を表す.これらをまとめて関数に渡せば,格子全体の値を一度に計算できる.
import matplotlib.pyplot as plt
plt.figure()
plt.gca().set_aspect("equal")
plt.scatter(xmesh, ymesh)
plt.title("grid points from meshgrid")
plt.show()
乱数¶
np.random は擬似乱数を生成する.default_rng で乱数生成器を作る方法が推奨される.
シード (seed)を固定すると,毎回同じ乱数列が得られ結果を再現できる.
rng = np.random.default_rng(seed=0)
# 一様乱数(0 以上 1 未満)
print("一様乱数:\n", rng.uniform(0, 1, size=(2, 3)))
# 整数の乱数(0 または 1)
print("0/1 乱数:\n", rng.integers(0, 2, size=(3, 3)))
# 正規乱数(平均 0,標準偏差 1)
print("正規乱数:", rng.normal(0, 1, size=4))一様乱数:
[[0.63696169 0.26978671 0.04097352]
[0.01652764 0.81327024 0.91275558]]
0/1 乱数:
[[1 1 1]
[1 1 1]
[1 1 0]]
正規乱数: [ 0.04132598 -2.32503077 -0.21879166 -1.24591095]
反応拡散モデル(P2-03)では,一様な初期状態にわずかな乱数を加えて対称性を破り,パターンを発生させる.
u = np.ones((4, 4))
u = u + rng.uniform(0, 0.01, size=u.shape)
print("わずかな揺らぎを加えた初期場:\n", u)わずかな揺らぎを加えた初期場:
[[1.00175656 1.00863179 1.00541461 1.00299712]
[1.00422687 1.0002832 1.00124283 1.00670624]
[1.0064719 1.00615385 1.00383678 1.0099721 ]
[1.00980835 1.00685542 1.00650459 1.00688447]]