Size: a a a

Язык программирования Julia / Julia programming language

2020 November 05

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
Обычно мысленно считаешь пакет или библиотеку какой-то законченный величиной
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Другой пример - это pandas. Да, он огромный и перегруженный, но зато для новичка всё просто и понятно - хочешь загрузить csv? вот тебе метод "read_csv". Хочешь сдвинуть колонку взад/вперёд? Вот тебе метод shift. Хочешь соединить несколько вызовов вместе? Вот тебе method chain.

А что в Julia? Есть DataFrames. Хочешь загрузить csv? Нужно использовать пакет CSV.jl. Хочешь соединить несколько вызовов вместе? Нужно использовать пакет Pipe.jl. Хочешь двигать колонку взад-вперёд? Используй ShiftedArrays.jl. И так далее.

С одной стороны, если ты уже прошёл этот путь, то это очень удобно, потому что Pipe.jl можно заменить на Underscores.jl, CSV.jl на TableReader.jl и так далее. Но об этом надо откуда то узнать и как-то понять как их все склеивать вместе. И на мой взгляд это достаточно сложный путь.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
По крайней мере у меня часто возникало ощущение, что экосистема Джулии напоминает ресторан самообслуживания, где надо самому себе еду готовить. Куча экзотических блюд, разные комбинации которых могут дать совершенно фантастический вкус, но вот только понять что с чем собирать неясно.
источник

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
Андрей Оськин
По крайней мере у меня часто возникало ощущение, что экосистема Джулии напоминает ресторан самообслуживания, где надо самому себе еду готовить. Куча экзотических блюд, разные комбинации которых могут дать совершенно фантастический вкус, но вот только понять что с чем собирать неясно.
Ресторан, в котором его части разнеснны по разным этажам и зданиям )
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Да 😊
И периодически появляются новые компоненты, которые говорят "с нами будет лучше".
Только они могут не говорить, а лежать где-нибудь в сторонке и если случайно на них не натолкнешься и не догадаешься применить, то никогда об этом не узнаешь.
источник

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
Я не задумывался, чаще всего думал типа это я сам дурак, что не знаю где что в Джулии, Андрею спасибо, что пояснили
источник

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
Андрей Оськин
Да 😊
И периодически появляются новые компоненты, которые говорят "с нами будет лучше".
Только они могут не говорить, а лежать где-нибудь в сторонке и если случайно на них не натолкнешься и не догадаешься применить, то никогда об этом не узнаешь.
И разработчики языка на это смотрят и ждут, ну-ну, когда же это все прорастает)
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
всплывают иногда обсуждения discoverability функциональности пакетов
пока хорошего решения не видел, но надеюсь кто-то время от времени задумывается :)
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Это вопрос методических материалов и повторяемости решений
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Да.
Это в общем и слабость и сила Джулии одновременно.

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

И картинка тогда - это матрица чисел.
А ещё между ними можно ввести понятие расстояния.

И если у вас есть много чисел, между которыми есть отношение расстояния, то их можно кластеризовать.

И вот, внезапно, соединяя Clustering.jl, Distances.jl` и ColorVectorSpace.jl вы получаете программу цветовой кластеризации картинки, причём она будет одинаково работать в любом цветовом пространстве, RGB, CMYK и так далее.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
То есть понятно как это сделать на других языках программирования, но меня восхитило, что условно достаточно сделать

img = load("picture.png")
cluster(img) # RGB clusterization

cluster(CMYK.(img)) # CMYK clusterization

distance
(x::RGB, y::RGB) = abs(red(x) - red(y))
cluster(img) # clusterization only in red channel
источник

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
В результат-то кластеризации что получается по сути?
источник

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
Регионы похожего цвета?
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Да, там разные задачи решаются.
Например создание палитр и поиск доминантного цвета.
Или например Color Quantization: https://en.wikipedia.org/wiki/Color_quantization

Можно выделить 256 основных цветов и сжать картинку в indexed palette.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Обращаю внимание для желающих ковыряться с цветами, если есть задача выделить похожие цвета, то работать надо в перспективных пространствах - https://en.wikipedia.org/wiki/CIELAB_color_space
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Касаемо же кластеризации, если задача раскидать пикселы, то её проще решить на векторах с размерностью пространства, чем каждый раз выделять компонент из числа
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Roman Samarev
Обращаю внимание для желающих ковыряться с цветами, если есть задача выделить похожие цвета, то работать надо в перспективных пространствах - https://en.wikipedia.org/wiki/CIELAB_color_space
Вот вот, как раз ровно это у меня и было. Я написал алгоритм, который кластеризовал RGB, но мне не понравился результат. Потом узнал про CIELAB или что-то похожее, одно маленькое изменение и у меня уже гораздо более рабочий вариант получился.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Надо было минимум усилий приложить, буквально что-то вроде CIELAB.(img)
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Ага, не совсем так, скорее
lab_img = Lab.(img)
distance(x::Lab, y::Lab) = colordiff(x, y, DE_AB())

cluster(img)
источник