お題の通り. 単純に v = numpy.random.uniform(-1, 1, size=3) v /= numpy.linalg.norm(v) 等とすると一様でなく偏った分布になってしまう. この場合, 例えば, 一行目で生成したvの長さが1以下の場合に限って正規化して返し, それ以上の場合は生成しなおすようにすれば良い(下のコードのcall_sprnd1を参照). それ以外にも色々な生成法があるのだが, 実際どの程度速度に違いが出るのか, 適当に書いたコードで試してみた. ただし, 面倒だったので乱数区間の端っこの扱い(開区間か閉区間か)が若干いい加減なので注意. import time import numpy import random as rng PI_2 = numpy.pi * 2 def call_wrong_sprnd(): v = numpy.array([r