帮助Matlab中的Compact数组操作来替换for循环

时间:2011-05-07 16:41:29

标签: arrays matlab for-loop

我需要模拟森林大火,为此,我需要一个色彩图。 colormap有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)

我希望某个地方有一个Matlab大师,他可以指出我正确的方向

提前致谢

1 个答案:

答案 0 :(得分:1)

第一个循环可以改写为:

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

我不太确定你想要在所有演员身上实现什么,不过......