投稿日:2023-01-05
#Grasshopper
#Python
今回は色々な乱数を、Python のライブラリ, Numpy を使用して生成し、Voronoi を作成してます。乱数について勉強したものの備忘録として記事化しとくことにしました。よければご参考ください。
今回は Numpy を使用して 5 種類の乱数を生成していきます。
Numpy を Grasshopper で使用するために、プラグイン GH Python Remote を使用しております。(※インストール・環境構築・使用方法は
を参照してください)
以下が Grasshopper コンポーネントの全体像です。
ざっくり説明しますと、
1from ghpythonlib import treehelpers as th 2import rpyc 3import scriptcontext as sc 4np = sc.sticky['numpy'] 5 6rng = np.random 7ptnum = 200 8dimension = 2 9 10def min_max(x, axis=None): 11 min = x.min(axis=axis, keepdims=True) 12 max = x.max(axis=axis, keepdims=True) 13 result = (x-min)/(max-min) 14 return result 15 16if x == 0: 17 uniform = rng.uniform(0,1,(ptnum, dimension)) 18 random_type = min_max(uniform) 19elif x == 1: 20 normal = rng.normal(0,1.0,(ptnum, dimension)) 21 random_type = min_max(normal) 22elif x == 2: 23 triangular = rng.triangular(0,0.5,1,(ptnum, dimension)) 24 random_type = min_max(triangular) 25elif x == 3: 26 beta = rng.beta(2, 2, (ptnum, dimension)) 27 random_type = min_max(beta) 28elif x == 4: 29 step = rng.choice([-0.1,0.1],ptnum) 30 random_walk = np.cumsum(step) 31 32 list = np.array([]) 33 tmp_list = list.tolist() 34 step = np.arange(0, 1, 1/ptnum) 35 remap_walk = min_max(random_walk) 36 37 for x, y in zip(step, remap_walk): 38 tmp_list.append(x) 39 tmp_list.append(y) 40 np_convert_list = np.asarray(tmp_list) 41 reshape_list = np.reshape(np_convert_list, (ptnum, 2)) 42 random_type = reshape_list 43 44val = rpyc.utils.classic.obtain(random_type.tolist()) 45val = th.list_to_tree(val, source=[0,0])
上のコードが python コードの全体となってます。
一様分布の乱数を生成した際の Voronoi です。 numpy.random.uniform を使用してます。 最も一般的な乱数で、点の位置からも満遍なくランダムな値が出力されているのがわかります。
正規分布から生成する乱数。numpy.random.normal を使用しています。 わかりやすいように点の数を 500 点に増やしてます。 0.5 を平均値にしているので、点が中心によっているのがわかります。
三角形分布から生成した乱数。numpy.random.triangular を使用してます。 こちらも、0.5 を最頻値としているので、やや中心に点がよっているのがわかります。
ベータ分布から生成した乱数。numpy.random.beta を使用してます。 三角形分布ほどではないですが、中心によっているのがわかります。
ランダムウォークを使用した乱数。株などの値動きで見られるものになります。 x 方向は一定に増えていき、y 方向にランダムウォークの値を使用してます。
ランダムな値はしばしば使いますが、いろんな乱数を使用したパターンを備忘録として残しときます。
【参考】