Pythonのrandomがわからなかったのでまとめてみました。
p5.jsでrandomを使ったことがあったのですが、Pythonではちょっと違いました。
ざっくりと以下があるようです。
- random.random()
- random.uniform()
- random.randint()
- random.randrange()
- random.choice()
- random.sample()
使い方を確認します。
import random
まず、randomをインポートします。
インポートしないと使えないのは、なんか新鮮です。
random.random()
これで、0~1の乱数が返ります。
random.uniform(-1,1)
任意の範囲の浮動小数点を取得できます。
random.randint(0,10)
任意の範囲の整数値を取得できる。
random.randrange(0,10,2)
randintと同じように使いますが、3つ目の引数でstepを設定できます。
上のように[2]を設定すると偶数を取得できる。
あと、リストから要素を取り出せる[choice]というのがあるようです。
data=['札幌','仙台','東京','名古屋','大阪','広島','福岡'] random.choice(data)
sampleだと複数の要素が取り出せる。
第2引数は要素の個数。
random.sample(data,3)
choicesも複数の要素が取り出せるが、重複がある。
第2引数の[k]は要素の個数。
random.choices(data,k=6)
choicesは[weights]で重みを付けれる。
random.choices(data,weights=[1,1,2,1,1,1,1],k=6)
randomの種類、結構多いですね。。
Blenderでやってみた
Blenderで確認しました。
cube(四角)はrandom、sphere(丸)はrandom.uniformで位置を設定しています。
cubeはx軸のプラス方向のみになっていて、sphereはマイナスとプラスの両方になっています。
import bpy import random for m in bpy.data.meshes: bpy.data.meshes.remove(m) def make_sphere(x, y, z): loc = (x, y, z) sphere = bpy.ops.mesh.primitive_uv_sphere_add(location=loc) def make_cube(x, y, z): loc = (x, y, z) cube = bpy.ops.mesh.primitive_cube_add(location=loc) def main(): for i in range(30): make_sphere( random.uniform(-1, 1)*10, random.uniform(-1, 1)*10, random.uniform(-1, 1)*10) make_cube( random.random()*10, random.random()*10, random.random()*10) if __name__ == '__main__': main()
また、「特定の分布に基づく乱数生成関数」というのがあるようです。
「独習Python」に載っていたのですが、よくわからなかったです。
わかったら改めてまとめます。