Matlab 版 (精华区)

发信人: zjliu (秋天的萝卜), 信区: Matlab
标  题: [合集]请教:
发信站: 哈工大紫丁香 (2003年11月29日11:20:34 星期六), 站内信件


────────────────────────────────────────
 cbt (cbt)                            于 Fri Nov 21 08:18:46 2003 说道:

我想生成这样一个向量(3*16581375),
即共有16581375个元素,
每个元素的三个值代表RGB值(取值范围为1-255),
16581375是255的三次方,
这样一个向量代表所有可能的颜色
请问一下怎样生成,
我可不想用三层循环.
谢谢!

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年11月21日08:32:51 星期五 说道:

我不知道你的顺序如何,下面是我的建议:
repmat      :复制数组,repmat(A,m,n)表示把A复制m行n列组成新数组
randperm    :随机置换
或者
A=1:16581375;
B=mod(A,255);

────────────────────────────────────────
 cbt (cbt)                            于 Fri Nov 21 08:46:02 2003 说道:

我是要生成RGB空间里的所有颜色
你的第一个建议有点像,但不会重复吗?
我要求的这个向量每一行分别为R值、G值、B值(R、G、B的取值都为1-255)
次序倒不要求,就是要求每种颜色都有
你的第2个建议我没看懂。
先谢了

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年11月21日08:50:20 星期五 说道:

用mod函数可以保证所有的数都在[0 254]之间,之后再加1就可以了

────────────────────────────────────────
 cbt (cbt)                            于 Fri Nov 21 09:47:31 2003 说道:

用循环实现则如下所示 
a = zeros(3,255 * 255 * 255); 
for i = 1 : 255 
    for j = 1 : 255 
        for k = 1 : 255 
            a(1,(i - 1) * 255 * 255 + (j - 1) * 255 + k) = i; 
            a(2,(i - 1) * 255 * 255 + (j - 1) * 255 + k) = j; 
            a(3,(i - 1) * 255 * 255 + (j - 1) * 255 + k) = k; 
        end 
    end 
end 
有不有更好的办法? 

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年11月21日09:47:36 星期五 说道:

模仿255进制数可这样写:
N=255;
A=0:N^3-1;
B1=mod(A,N);
B2=mod((A-B1)/N,N);
B3=fix(A/N^2);
B1=B1+1;
B2=B2+1;
B3=B3+1;
RGB=[B1;B2;B3]

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年11月21日09:48:00 星期五 说道:

看看我写的上文

────────────────────────────────────────
 cbt (cbt)                            于 Fri Nov 21 09:57:02 2003 说道:

谢谢!

────────────────────────────────────────
 cbt (cbt)                            于 Fri Nov 21 10:28:52 2003 说道:

N = 255;
a = [1 : N];
a = a(ones(1,N * N),:);
b = reshape(a,N,N * N);
a1 = reshape(a',1,N ^ 3);
a2 = reshape(b',1,N ^ 3);
a3 = reshape(a,1,N ^ 3);
RGB = [a1;a2;a3];
根据zjliu的提示再次改写,是不是能更快一些?

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年11月21日11:58:12 星期五 说道:

你试了么?运行速度如何?

────────────────────────────────────────
 cbt (cbt)                            于 Fri Nov 21 14:25:29 2003 说道:

速度还行!

────────────────────────────────────────
 zjliu (秋天的萝卜)                   于 2003年11月21日15:48:47 星期五 说道:

看来是我的机器性能不行,我这运行不了

────────────────────────────────────────
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.778毫秒