Помогите с компактными операциями с массивами в Matlab, чтобы заменить циклы for - PullRequest
0 голосов
/ 07 мая 2011

Мне нужно смоделировать лесной пожар и для этого мне нужна карта цветов. Цветовая карта имеет 51 строку, которая выглядит следующим образом:

Первые 10 - это градиент от темно-зеленого до желтого, и строки генерируются:

uint8color = [4 112 31];
for i = -1:8
    cmap = double(uint8(uint8color + i*[30 27 3])) / 255
end;

Следующая синяя линия:

cmap(11, :) = [0 0.5 0.9];

А оставшиеся 40 строк переходят от желтого к красному почти к черному, что делается следующим образом:

for i=19:-1:-20
    farve = double(uint8(uint8farve + i*[12 12 5])) / 255;
end;

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

Я довольно застрял с вышесказанным, не понимая, как (и если) я могу использовать компактную нотацию, но при этом иметь индекс под рукой.

Для первых 10 строк, что-то вроде:

cmap(1:10, :)

Заменил бы цикл for, но мне потребовалось бы каким-то образом извлечь индекс и вычесть 2 из значения (1:10 -> -1: 8)

Я надеюсь, что где-нибудь есть гуру Матлаб, который может указать мне правильное направление

Заранее спасибо

1 Ответ

1 голос
/ 07 мая 2011

Первый цикл можно переписать так:

uint8color = [4 112 31];
i = (-1:8)';
cmap = double(uint8(repmat(uint8color, length(i), 1) + i*[30 27 3])) / 255;

Я не совсем уверен, чего вы пытаетесь достичь с помощью всех этих бросков ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...