Pythonのrandomがわからなかったのでまとめてみました。
p5.jsでrandomを使ったことがあったのですが、Pythonではちょっと違いました。
ざっくりと以下があるようです。
- random.random()
- random.uniform()
- random.randint()
- random.randrange()
- random.choice()
- random.sample()
使い方を確認します。
import random
まず、randomをインポートします。
インポートしないと使えないのは、なんか新鮮です。
random.random()
# 0.07559877180636054
これで、0~1の乱数が返ります。
random.uniform(-100,100) # 92.07673281390541 # -53.74115299039885
任意の範囲の浮動小数点を取得できます。
random.randint(-100,100) # 88 # -94
任意の範囲の整数値を取得できる。
random.randrange(-100,100,2) # 20 # -58
randintと同じように使いますが、3つ目の引数でstepを設定できます。
上のように[2]を設定すると偶数を取得できる。
あと、リストから要素を取り出せる[choice]というのがあるようです。
data=['札幌','仙台','東京','名古屋','大阪','広島','福岡'] random.choice(data) # '東京'
sampleだと複数の要素が取り出せる。
第2引数は要素の個数。
data=['札幌','仙台','東京','名古屋','大阪','広島','福岡'] random.sample(data,3) # ['広島', '東京', '仙台']
choicesも複数の要素が取り出せるが、重複がある。
第2引数の[k]は要素の個数。
data=['札幌','仙台','東京','名古屋','大阪','広島','福岡'] 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」に載っていたのですが、よくわからなかったです。
わかったら改めてまとめます。