Форум сайта python.su
Dimka665Зато я буду знать, что в случае 0..9 будет идти, например, после 6.
и то и другое похоже на случайные числа. попробуй использовать стандартный модуль питона, чтобы получить последовательность 0 1 2 3 4 5 6 7 8 9. вероятность ее получить мала)))
но вероятность получить последовательность 1 3 7 0 5 4 6 8 9 2, точно такая же как и получить 0..9.
если распределение величин из равномерное, то обе эти последовательности имеют одну и ту же вероятность появления.
если распределение нормальное (ранее упомянутый “колокол”), то обе эти последовательности не похожи на случайные.
import random
indict = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0}
table = [x for x in indict.keys()]
for i in xrange(1000000):
next = random.choice(table)
indict[next] += 1
print indict
Можешь поступить так. Теоретически твоя последовательность - бесконечная. Но если она удовлетворяет какому-либо распределению, то и любой ее кусок тоже (с большей ошибкой, конечно же). На практике то выражается в следующем: нарезаешь вход на сколько-то там выборок. Чисел по сто хотя бы (считают, что 30 - минимально необходимый размер, а ты перекрой его в несколько раз. Чем больше, тем лучше). Анализируй каждый кусок отдельно. Результаты должны быть похожими. Упорядоченная последовательность покажет совершенно разные параметры распределения для каждого своего куска.хм ..
Отредактировано (Дек. 26, 2008 11:30:13)
Офлайн
случайные распределения бывают разные.
import random
indict = {}
for i in xrange(10000):
next = int(round((random.normalvariate(5, 2))))
if next in indict:
indict[next] += 1
else:
indict[next] = 1
Отредактировано (Дек. 26, 2008 12:20:36)
Офлайн
iceНачало правильное.
Твои приведенные списки (берется не кол-во, а его отношение к общему кол-ву испытаний-замеров) будут как раз задавать функцию распределения в табличном виде. Дальше - как функции обычно сравниваются… Рисунок - только один из вариантов представления функции, очень наглядный.
Только, чую, трудно все это объяснить будет. Я хоть и почти все забыл, но когда-то в институте мне высшую математику таки читали. А тут общение ведется на каком-то допещерном уровне.
Следует понять, что нет “случайного числа вообще”. А есть функции распределения случайных чисел, отличающиеся типом этого самого распределения и числовыми параметрами-настройками. В том же random модуле их больше десятка.
Стоит почитать что-нибудь на эту тему. Что именно - не знаю, ничего не присоветую. Мне учебников по ТВ хватает. После осознания принципов техническая реализация покажется легкой забавой, в которой действительно нет ничего сложного. Без хотя бы минимальной теории не получиться использовать даже готовые библиотеки. Никто не скажет - действительно случайное число! Будут возвращать какие-то численные оценки, которые потом нужно будет интерпретировать.
PS. О гауссовом распределении, оно же колокол. Представь, завод рельсы делает. Железнодорожные. Ты - в службе качества, длину рельс контролируешь и прочие размеры заодно. Все рельсы, конечно же, чуть-чуть разные. Отбирается контрольная партия. Каждая рельса перемеряется (если нужно - с микрометром). Строится график. Если все нормально - он выглядит как колокол с вершиной, соответствующей проектной длине и шириной, определяемой допуском. Если что-то на производстве пошло не так - форма будет другая.
Ничего сложного, как и всегда.
Офлайн
Не стал слишком глубоко вникать в написанное, так что опять же сильно не пинайте.
FerromanНу дык а я о чём? :-)
ZZZ
Спрашивали не как сделать генератор, а проверить полученные числа на случайность.
Коче говоря или свой проверяет или чужой
# -*- coding: utf-8 -*-
def random_index(l):
return sum(map(lambda i: abs(l[i] - l[i+1]), xrange(len(l)-1)))/float(len(l) - 1)
# Ладно, не пугайтесь... :-)
def random_index(l):
s = 0
for i in xrange(len(l) - 1):
s += abs(l[i] - l[i+1])
return s / float(len(l) - 1)
import random
random_list = range(0, 1000)
random.shuffle(random_list)
# Сам индекс
print random_index(random_list)
# И нужно сравнивать с этим
print random_index(sorted(random_list))
Офлайн
Офлайн
Андрей Светлов
Почитал. Въехал. Интересно. Спасибо.
Отредактировано (Дек. 27, 2008 01:37:10)
Офлайн
Офлайн
Андрей Светлов
Спасибо огромное :) Про колокол понял что к чему. Ну а то, что на допещерном уровне, так в медакадемии никогда по-другому и не преподавали.
Сейчас пытаюсь описать сравнение кусков последовательности.
shiza
тоже спасибо за ссылку, посмотрю :)
ZZZ
И тебе сасибо, код посмотрю.
Вот так с миру по нитки и пойму математику случайных величин :)
Офлайн
Единственное - ice будь внимателен - нормальное распределение здесь упоминалось только в качестве примера, однако типичная функция random (в том числе random.random из стандартной библиотеки python) генерит числа равномерного распределения. Твой генератор скорее всего (OMG - снова теория вероятности :) ) также генерит числа равномерного распределения.
Офлайн
ZANДа, да. Он должен генерить такую последовательность. Вот я и хочу узнать на сколько это так и есть ли какие отклонения в пользу определенного значения на очень большом расстоянии.
Единственное - ice будь внимателен - нормальное распределение здесь упоминалось только в качестве примера, однако типичная функция random (в том числе random.random из стандартной библиотеки python) генерит числа равномерного распределения. Твой генератор скорее всего (OMG - снова теория вероятности :) ) также генерит числа равномерного распределения.
Офлайн