Найти - Пользователи
Полная версия: Нужна помощь математиков. Про случайные числа
Начало » Python для экспертов » Нужна помощь математиков. Про случайные числа
1 2 3
ice
Dimka665
и то и другое похоже на случайные числа. попробуй использовать стандартный модуль питона, чтобы получить последовательность 0 1 2 3 4 5 6 7 8 9. вероятность ее получить мала)))
но вероятность получить последовательность 1 3 7 0 5 4 6 8 9 2, точно такая же как и получить 0..9.

если распределение величин из равномерное, то обе эти последовательности имеют одну и ту же вероятность появления.

если распределение нормальное (ранее упомянутый “колокол”), то обе эти последовательности не похожи на случайные.
Зато я буду знать, что в случае 0..9 будет идти, например, после 6.

А вот про этот колокол:

То есть числа как бы те, что посередине спектра будут встречаться чаще?

ну вот у меня есть варианты 0 - 9

значит самое частое число, которое будет в нагенереном ряду - 5? Почему так обидели 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
на выходе:

{0: 99560, 1: 99902, 2: 100368, 3: 100275, 4: 99957, 5: 100052, 6: 99989, 7: 99365, 8: 100339, 9: 100193}


Можешь поступить так. Теоретически твоя последовательность - бесконечная. Но если она удовлетворяет какому-либо распределению, то и любой ее кусок тоже (с большей ошибкой, конечно же). На практике то выражается в следующем: нарезаешь вход на сколько-то там выборок. Чисел по сто хотя бы (считают, что 30 - минимально необходимый размер, а ты перекрой его в несколько раз. Чем больше, тем лучше). Анализируй каждый кусок отдельно. Результаты должны быть похожими. Упорядоченная последовательность покажет совершенно разные параметры распределения для каждого своего куска.
хм ..
Сейчас я скажу, что понял, а ты расскажи правильно ли я понял :)

Берем лист и нарезаем его на кучу мелких листов (по 100 - 150 элементов), в каждом листе считаем вхождение элементов.

А вот как с “Анализируй” быть? можно, конечно, нарисовать график на каком-нить виджете, но как это сделать без рисунка?

У меня на выходе получились другие листы (или словари {элемент: кол-во}) Как узнать, что они “примерно одинаковы”?
Dimka665
случайные распределения бывают разные.

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
indict == {0: 99, 1: 283, 2: 641, 3: 1181, 4: 1705, 5: 2036, 6: 1800, 7: 1182, 8: 638, 9: 274, 10: 109, 11: 18, 12: 5, 14: 1, -2: 5, -3: 1, -1: 22}
Андрей Светлов
iceНачало правильное.
Твои приведенные списки (берется не кол-во, а его отношение к общему кол-ву испытаний-замеров) будут как раз задавать функцию распределения в табличном виде. Дальше - как функции обычно сравниваются… Рисунок - только один из вариантов представления функции, очень наглядный.

Только, чую, трудно все это объяснить будет. Я хоть и почти все забыл, но когда-то в институте мне высшую математику таки читали. А тут общение ведется на каком-то допещерном уровне.

Следует понять, что нет “случайного числа вообще”. А есть функции распределения случайных чисел, отличающиеся типом этого самого распределения и числовыми параметрами-настройками. В том же random модуле их больше десятка.
Стоит почитать что-нибудь на эту тему. Что именно - не знаю, ничего не присоветую. Мне учебников по ТВ хватает. После осознания принципов техническая реализация покажется легкой забавой, в которой действительно нет ничего сложного. Без хотя бы минимальной теории не получиться использовать даже готовые библиотеки. Никто не скажет - действительно случайное число! Будут возвращать какие-то численные оценки, которые потом нужно будет интерпретировать.

PS. О гауссовом распределении, оно же колокол. Представь, завод рельсы делает. Железнодорожные. Ты - в службе качества, длину рельс контролируешь и прочие размеры заодно. Все рельсы, конечно же, чуть-чуть разные. Отбирается контрольная партия. Каждая рельса перемеряется (если нужно - с микрометром). Строится график. Если все нормально - он выглядит как колокол с вершиной, соответствующей проектной длине и шириной, определяемой допуском. Если что-то на производстве пошло не так - форма будет другая.
Ничего сложного, как и всегда.
ZZZ
Не стал слишком глубоко вникать в написанное, так что опять же сильно не пинайте.

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))
ZZZ
Андрей Светлов
Почитал. Въехал. Интересно. Спасибо.
Zeiram
как вариант) http://www.research.att.com/~njas/sequences/index.html?language=russian
ice
Андрей Светлов
Спасибо огромное :) Про колокол понял что к чему. Ну а то, что на допещерном уровне, так в медакадемии никогда по-другому и не преподавали.
Сейчас пытаюсь описать сравнение кусков последовательности.
shiza
тоже спасибо за ссылку, посмотрю :)
ZZZ
И тебе сасибо, код посмотрю.
Вот так с миру по нитки и пойму математику случайных величин :)
ZAN
Единственное - ice будь внимателен - нормальное распределение здесь упоминалось только в качестве примера, однако типичная функция random (в том числе random.random из стандартной библиотеки python) генерит числа равномерного распределения. Твой генератор скорее всего (OMG - снова теория вероятности :) ) также генерит числа равномерного распределения.
ice
ZAN
Единственное - ice будь внимателен - нормальное распределение здесь упоминалось только в качестве примера, однако типичная функция random (в том числе random.random из стандартной библиотеки python) генерит числа равномерного распределения. Твой генератор скорее всего (OMG - снова теория вероятности :) ) также генерит числа равномерного распределения.
Да, да. Он должен генерить такую последовательность. Вот я и хочу узнать на сколько это так и есть ли какие отклонения в пользу определенного значения на очень большом расстоянии.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB