Nano Hash - криптовалюты, майнинг, программирование

RGB-эквивалент функции image() в R?

Я запускаю симуляцию, в которой два типа агентов соревнуются друг с другом. Назовем этих агентов «красными» и «синими». Возможны три исхода: выигрывает красный, выигрывает синий или проигрывают все. Предположим также, что система зависит от двух параметров: X и Y.

Что я хотел бы сделать, так это создать график псевдоцвета, который кодирует результат как функцию X и Y.

  • Оттенок каждой точки — это вероятность того, что выиграет либо красный, либо синий, при условии, что кто-то выиграет. Если синий всегда побеждает, то это синий; если красное всегда побеждает, оно красное; и т. д.

  • Насыщение — это вероятность того, что кто-то выиграет. Таким образом, если никто никогда не выигрывает при некотором значении X и Y, эта точка будет серой (по крайней мере, в модели HSV).

РЕДАКТИРОВАТЬ: Допустим, мы используем модель HSV, закодированную здесь. (Это не обязательно должно быть так, но предположим, что это так.) Чистый синий — это (240, 100, 100) в пространстве HSV, а чистый красный — (360, 100, 100). Предположим также, что красные выигрывают в 50% случаев, синие — в 25%, и никто не выигрывает в 25% случаев. Тогда эта точка будет (330, 75, 100).

Обратите внимание, что я не беспокоюсь о преобразовании из HSV в RGB — для этого я могу просто использовать col2rgb(hsv(...)). Вопрос в самом сюжете. Насколько я могу судить, функция image() может кодировать только один канал информации; это два канала информации.

Кроме того, результат является непрерывной функцией X и Y, поэтому я хочу интерполировать значения. (Для этого я использую пакет 'akima', если это имеет значение.) Отсюда решение, которое я нашел здесь мне не помогает (я думаю).

Я рад использовать любой пакет. Я также рад не использовать R, пока результат красивый и не слишком сложный.

Спасибо за любую помощь, которую вы можете предложить.


  • Я бы посмотрел на ggplot2::geom_tile с пользовательскими значениями scale_fill_continuous и scale_alpha. 03.06.2014
  • Можете ли вы предоставить небольшой пример набора данных? Что, если с вероятностью 50 % выиграет красный цвет и с вероятностью 25 % выиграет синий? 03.06.2014
  • Если есть 50%-ная вероятность того, что выиграет красный цвет, и 25%-ная вероятность того, что выиграет синий, то точка должна находиться на 2/3 пути между красным и синим с точки зрения оттенка и на 75% насыщенности. Если мы предположим, что чистый синий — это (240, 100, 100) в HSV, а чистый красный — (360, 100, 100), тогда этот случай будет (330, 75, 100). 03.06.2014
  • Вы можете создать свою собственную палитру (довольно просто, на самом деле) и использовать команды plot базового пакета с аргументом col, установленным в функцию значений данных. (Кстати, распространенный трюк заключается в использовании прозрачных цветов и перерисовывании участков там, где вы хотите получить более сплошной цвет). Или вы можете сбросить свои данные на пару raster слоев и таким образом назначить цвета. 03.06.2014
  • Карл, я просмотрел параметр палитры, но похоже, что поиск по-прежнему однозначен. Я что-то упускаю? Возможно, есть какой-то трюк с комплексными числами? 03.06.2014

Ответы:


1

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

#put two "channels" of informaion in matrices
mpRed<-matrix(runif(5*5), nrow=5)
mpAny<-matrix(runif(5*5), nrow=5)

#define break points for colors/saturation
colBr<-seq(0,1, length.out=3)
satBr<-seq(0,1,length.out=5)

#now categorize observed values
vcRed<-cut(mpRed, colBr, labels=F)
vcAny<-cut(mpAny, satBr, labels=F)
vcComb<-as.numeric(interaction(vcRed, vcAny))
mcComb<-matrix(vcComb, ncol=ncol(mpAny))

#create colors for each of the levels
cols<-as.vector(outer(colBr[-1], satBr[-1], 
    FUN=function(a,b) hsv(ifelse(a>.5,1,.667),b,1)))

#make plot
with(dd, image(mcComb, col=cols, breaks=(0:length(cols))+.5))

результирующий сюжет

03.06.2014

2

Если вы можете создать массив со значениями RGB (размеры 1 и 2 относятся к вашей матрице, размер 3 — это красный, зеленый и синий компоненты), то вы можете построить это с помощью функции rasterImage.

Простой пример (я оставлю преобразование hsv -> rgb вам):

red <- matrix( runif(100), 10, 10 )
blue <- matrix( runif(100), 10, 10 )

rgb.mat <- array( dim=c(10,10,3) )
rgb.mat[ , ,1 ] <- red
rgb.mat[ , ,2 ] <- 0
rgb.mat[ , ,3 ] <- blue

plot.new()
plot.window(xlim=c(0,1),ylim=c(0,1))
rasterImage( rgb.mat, 0,0,1,1 )  # interpolate
rasterImage( rgb.mat, 0,0,1,1, interpolate=FALSE ) # don't
03.06.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..