【问题标题】:Help with Compact array-operations in Matlab to replace for-loops帮助使用 Matlab 中的紧凑数组操作来替换 for 循环
【发布时间】:2011-08-20 19:41:36
【问题描述】:

我需要模拟一场森林火灾,为此,我需要一个颜色图。 颜色图有 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 大师,他可以为我指明正确的方向

提前致谢

【问题讨论】:

    标签: arrays matlab for-loop


    【解决方案1】:

    第一个循环可以改写为:

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

    不过,我不太确定你想通过所有这些演员来实现什么......

    【讨论】:

    • 这很完美!我不敢相信答案这么简单,非常感谢。关于演员表,我知道这看起来很奇怪,但没有他们,价值观就会混乱
    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多