Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Равномерно распределить числа по интервалу. 
:(
    Опции темы
sergejzr
Дата 2.5.2007, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Допустим есть рабочий интервал 0-10000 
Теперь существует множество интервальчиков (примеры: 10-25, 5-500,2000-2003) и всех их надо "растянуть" на рабочий.
user posted image


Первое что пришло в голову - проекция. Она работает достаточно неплохо, но два нюанса есть. 
user posted image

1) По краям элементы расходятся быстрее чем в середине
2) Интервалы - это на самом деле примеры по которым предсказываем реальные данные. Это означает, что числа могут выходить за пределы примеров и проекция пошлёт их далеко за пределы рабочего т.к. по краям расхожесть большая (см. пункт 1) 
user posted image

Если представить интервалы как резинки, как можно наидудобнее растянуть их на одну длину? Или всё таки проекция не так уж и плоха?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Artemios
Дата 2.5.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 1
Всего: 50



А если тупое линейное сжатие/растяжение пространства?
(то есть элеметнарное масштабирование) плюс смещение...

Это сообщение отредактировал(а) Artemios - 2.5.2007, 12:46


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
kulibinka
Дата 2.5.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 20.11.2006

Репутация: 2
Всего: 4



Для похожей задачи пользовалася следующим кодом на питоне:
Код

def normalize_list (lst, y0, y1, x0_x1 = ()):
    """ф-я нормализации списка из целых значений
    получаем список целых значений, и нормализуем его значениями от, до
    если есть x0_x1 (а это глобальный минимум-максимум получаемого списка), то мы берем их как минимум-максимум, а иначе в лоб его ищем"""
    rezult = []
    if len(x0_x1)>0:
        x0, x1 = x0_x1
    else:
        x0 = min(lst)
        x1 = max(lst)
    koef = float((y1-y0))/(x1-x0)
    for i in lst:
        rezult.append( float(i-x0)*koef + y0)
    return rezult

PM MAIL   Вверх
sergejzr
Дата 2.5.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



kulibinka,  огромнейшее спасибо! то, что нужно! smile smile 




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Artemios
Дата 2.5.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 1
Всего: 50



Цитата(kulibinka @  2.5.2007,  23:31 Найти цитируемый пост)
*koef

растяжение
Цитата(kulibinka @  2.5.2007,  23:31 Найти цитируемый пост)
 + y0

смещение.
 smile 



--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
sergejzr
Дата 3.5.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Да, это то же самое. И проекция так же. Всё замечательно, но края расходятся довольно круто. Как бы их о буздать?...

Пример растягиваем числа 300-320 на интервал 0-5000 получается коеффициент 250.
если вдруг придёт число 321, то займёт значение уже 5250, а 299 будет уже -250.
А это почти полный исходный интервал! и 5% от общего!

Надо бы проекцию, но не прямыми, а изогнутыми чтобы в заданном интервале было всё нормально, а значения-аутсайдеры не улетали далеко.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 3.5.2007, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Вот к примеру как на картинке... Прямая отправит аутсайдера в космос, а кривая не даст далеко уйти. Только как это просто сделать....
user posted imageая


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Artemios
Дата 3.5.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 1
Всего: 50



Цитата(sergejzr @  3.5.2007,  01:14 Найти цитируемый пост)
И проекция так же.

Неа, проекция из твоих верхних картинок не является линейным преобразованием, ибо там изометрическая проекция.
Если объяснять "на пальцах" то пусть d -- малый отрезок и D -- большой. При изометрической проекции равным подъинтервалам на d будут соответствовать неравные подъинтервалы на D. При линейном преобразовании (как у kulibinka) -- равным соответствуют равные, и в принципе 5% от общего -- это то же самое, как и 321-320=1 для интервала 320-300=20. 

Если тебе неважно сохранение пропорций, попробуй обратную изометрию. Например, малый отрезок d выгни по дуге окружности с центром в точке, откуда ведёшь проекционные лучи. Только для каждого малого интервала придется подбирать свой радиус и расстояние от центра до D (это уж на твой вкус, пока "разлет" не будет тебя удовлетворять).

Добавлено через 3 минуты и 22 секунды
P.S. И лучи неизвестными кривыми не придется заменять.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
sergejzr
Дата 3.5.2007, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Artemios, хорошая идея... можно попытаться..


Цитата(Artemios @  3.5.2007,  00:11 Найти цитируемый пост)
Если тебе неважно сохранение пропорций,

Не важно, важно только, что порядок точек сверху вниз не нарушится.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Artemios
Дата 3.5.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 1
Всего: 50



Цитата(Artemios @  3.5.2007,  02:11 Найти цитируемый пост)
Если тебе неважно сохранение пропорций, попробуй обратную изометрию. Например, малый отрезок d выгни по дуге окружности с центром в точке, откуда ведёшь проекционные лучи. Только для каждого малого интервала придется подбирать свой радиус и расстояние от центра до D (это уж на твой вкус, пока "разлет" не будет тебя удовлетворять).

Мда... Ночь, устал, пространственное мышление отсутствует напрочь. Конечно же, при предложенном мной варианте "разлет" на краях будет еще больше первоначального. А надо бы "выгнуть" по окружности не малый отрезок d, а большой D -- тогда все нормально.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.