Продолжение: “Сортировка” цветов отчетливостью

Я решил использовать декораторы для решения проблемы сериализации объекта datetime. Вот мой код:

#myjson.py
#Author: jmooremcc 7/16/2017

import json
from datetime import datetime, date, time, timedelta
"""
This module uses decorators to serialize date objects using json
The filename is myjson.py
In another module you simply add the following import statement:
    from myjson import json

json.dumps and json.dump will then correctly serialize datetime and date 
objects
"""

def json_serial(obj):
    """JSON serializer for objects not serializable by default json code"""

    if isinstance(obj, (datetime, date)):
        serial = str(obj)
        return serial
    raise TypeError ("Type %s not serializable" % type(obj))


def FixDumps(fn):
    def hook(obj):
        return fn(obj, default=json_serial)

    return hook

def FixDump(fn):
    def hook(obj, fp):
        return fn(obj,fp, default=json_serial)

    return hook


json.dumps=FixDumps(json.dumps)
json.dump=FixDump(json.dump)


if __name__=="__main__":
    today=datetime.now()
    data={'atime':today, 'greet':'Hello'}
    str=json.dumps(data)
    print str

Импортируя вышеуказанный модуль, мои другие модули используют json обычным способом (без указания ключевого слова по умолчанию) для сериализации данных, содержащих объекты времени даты. Код datetime serializer автоматически вызывается для json.dumps и json.dump.

20
задан Community 23 May 2017 в 12:26
поделиться

8 ответов

Это также звучит мне как некоторый график сопротивления , где Вы пытаетесь планировать путь наименьшего сопротивления. Если Вы инверсия требования, путь максимального сопротивления, это могло бы, возможно, использоваться для создания набора, который от запуска производит максимальную разницу, когда Вы идете, и к концу начинает возвращаться к значениям ближе другим.

, Например, вот один способ, возможно, сделать то, что Вы хотите.

  1. Вычисляют расстояние (касательно Ваше другое сообщение ) от каждого цвета до всех других цветов
  2. Сумма расстояния для каждого цвета, это дает Вам признак для , как далеко далеко этот цвет от всех других цветов в общем количестве
  3. Порядок список расстоянием, понижаясь

Это, кажется, произвело бы список, который запускается с цвета, который дальше всего вдали от всех других цветов, и затем спуститесь, цвета к концу списка были бы ближе к другим цветам в целом.

Редактирование: Чтение Вашего ответа на мое первое сообщение, о пространственном подразделении, точно не соответствовало бы вышеупомянутому описанию, так как цвета близко к другим цветам упадут на нижнюю часть списка, но скажем, у Вас есть кластер цветов где-нибудь, по крайней мере один из цветов от того кластера был бы расположен около запуска списка, и это будет то, которое обычно дальше всего было вдали от всех других цветов всего. Если это имеет смысл.

2
ответ дан 30 November 2019 в 01:30
поделиться

N максимально удаленные цвета может считаться рядом хорошо распределенных точек в 3-мерном (цветном) пространстве. Если можно генерировать их от последовательность Холтона , то любой префикс (первые цвета M) также состоит из хорошо распределенных точек.

2
ответ дан 30 November 2019 в 01:30
поделиться

Эту проблему называют цветным квантованием и имеет много известных алгоритмов: http://en.wikipedia.org/wiki/Color_quantization я знаю людей, которые реализовали подход дерева октантов успешно.

2
ответ дан 30 November 2019 в 01:30
поделиться

Кажется, что восприятие важно для Вас, в этом случае Вы могли бы хотеть рассмотреть работу с перцептивным цветовым пространством, таким как YUV, YCbCr или Лаборатория. Каждый раз я использовал их, они дали мне намного лучшие результаты, чем sRGB один.

Преобразование в и от sRGB может быть болью, но в Вашем случае это могло на самом деле сделать алгоритм более простым, и в качестве награды это будет главным образом работать на цветные жалюзи также!

2
ответ дан 30 November 2019 в 01:30
поделиться

Если я понимаю вопрос правильно, Вы хотите получить подмножество цвета M с самое высокое среднее расстояние между цветами, учитывая некоторую функцию расстояния d.

Другими словами, рассматривая начальный набор N окрашивает как большой, неориентированный граф, в котором соединены все цвета, Вы хотите найти самый длинный путь , который посещает любой М узлы.

Решающими полными NP проблемами графика является путь вне меня, я боюсь, но Вы могли попытаться выполнить простое физическое моделирование:

  1. Генерируют М , случайные точки в цветовом пространстве
  2. Вычисляют, расстояние между каждой точкой
  3. Вычисляют векторы отвращения для каждой точки, которая отодвинет его от всех других точек (использующий 1 / ( расстояние ^ 2) как величина вектора)
  4. Сумма векторы отвращения для каждой точки
  5. Обновление, положение каждой точки согласно суммированным векторам отвращения
  6. Ограничивает любого из связанных координат (таких как яркость, идущая отрицательный или выше одной)
  7. Повторение от шага 2, пока точки не стабилизировались
  8. Для каждой точки, выберите ближайший цвет из исходного набора N

, Это совсем не эффективно, но для маленького M это может быть достаточно эффективно, и это даст близкие оптимальные результаты.

, Если Ваша цветная функция расстояния проста, может быть более детерминированный способ генерировать оптимальное подмножество.

1
ответ дан 30 November 2019 в 01:30
поделиться
  1. Запускаются с двух списков. CandidateColors, который первоначально содержит Ваши разные цвета и SortedColors, который первоначально пуст.
  2. Выбор любой цвет и удаляет его из CandidateColors и поместил его в SortedColors. Это - первый цвет и будет наиболее распространено, таким образом, это - хорошее место для выбора цвета, который танцует джайв хорошо с приложением.
  3. Для каждого раскрашивают CandidateColors, вычисляют его общее расстояние. Общее расстояние является суммой расстояния от CandidateColor до каждого из цветов в SortedColors.
  4. Удаляют цвет с самым большим общим расстоянием от CandidateColors и добавляют его в конец SortedColors.
  5. , Если CandidateColors не пуст, вернитесь к шагу 3.

, Этот жадный алгоритм должен дать Вам хорошие результаты.

1
ответ дан 30 November 2019 в 01:30
поделиться

Сделайте Вы подразумеваете, что от ряда N цвета, необходимо выбрать цвета M, где M < N, такой, что M лучший , представление N раскрашивает пространство M?

Как лучший пример, уменьшите истинный цвет (цветовое пространство на 24 бита) к 8-разрядному отображенному цветовому пространству (GIF?).

существуют алгоритмы квантования для этого, как Адаптивное Пространственное Подразделение алгоритм, используемый ImageMagic.

Эти алгоритмы обычно только выбирают существующие цвета от исходного пространства, но создает новые цвета в целевом пространстве, которые наиболее тесно напоминают исходные цвета. Как упрощенный пример, если Вы имеете 3, раскрашивает исходное изображение, где два являются красными (с другой интенсивностью или синеватыми оттенками и т.д.), и третье является синим, и потребность уменьшить до двух цветов, целевое изображение могло иметь красный цвет, который является некоторым средним числом исходных двух, красных + синий цвет от исходного изображения.

, Если Вам нужно что-то еще затем, что я не понял Вашего вопроса :)

0
ответ дан 30 November 2019 в 01:30
поделиться

Можно разделить их в к ШЕСТНАДЦАТЕРИЧНОМУ формату RGB так, чтобы можно было сравнить R с R другого цвета, того же с G и B.

Тот же формат как HTML

XX XX XX
RR GG BB

00 00 00 = black
ff ff ff = white
ff 00 00 = red
00 ff 00 = green
00 00 ff = blue

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

0
ответ дан 30 November 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: