Я изменил ваш код, чтобы фактически возвращать значения (и использовал randint
вместо rand
- разве это не то, что вы имели в виду?) Вот так ...
def use_multinomial(length, num_points):
probs = ones(length)/float(length)
return multinomial(1, probs, num_points)
def use_rand(length, num_points):
return [randint(1,length) for _ in range(num_points)]
Затем я попробовал свою собственную версию, используя numpy.random.randint
для генерации массива случайных точек в строке:
def use_np_randint(length, num_point):
return nprandint(1, length, num_points)
Результаты:
Multinomial took: 13.6279997826 seconds
Rand took: 0.185000181198 seconds
NP randint took: 0.00100016593933 seconds
Multinomial, по-видимому, действительно очень медленный, но разве это то, что вы хотите? Я думал, вы сказали, что хотите равномерное распределение? Использование randint от numpy - самая быстрая из всех.