| 查看: 2689 | 回复: 9 | ||
yqx1985木虫 (著名写手)
云中仙
|
[求助]
MATLAB如何随机分组数据
|
|
大家好我有一组数据,想对它进行随即分组,该如何完成? 举例如下:假设我有6个数据,不放设为 data=rand(1,6); 我想将这6个数据随机分为3组,注意是随机,每组含有数据是要可以变化的。 比如,这一次分组情况:数据data(1)和data(2)分到了一组,data([3,4,5])分到了另一组,data(6)分到了最后一组。 下次的分组情况:数据data(1)和data(2)分到了一组,data([3,4])分到了另一组,data([5,6])分到了最后一组。 以此等等…… 因为每组所含的数据个数是不同的,所以类似我的这样的分组问题matlab是否已有提供函数或谁有好的方法实现呢? 这个问题我觉得主要是一个排列组合问题,6个样本分成3组实际上也就有那么几种方式,即:114(表示有一个组内有一个样本,另一个组内有一个样本,最后一个组内有三个样本),123,222。 所以问题可以转化成,N个样本分成m组,有几种方式?不知道这样说的话,大家是否有好的方法或建议呢? |
» 本帖已获得的红花(最新10朵)
» 猜你喜欢
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
2025冷门绝学什么时候出结果
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有8人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有5人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求助大侠帮忙,有关matlab模拟数据
已经有29人回复
如何用matlab处理txt文件里的数据
已经有7人回复
MATLAB 数据导入
已经有13人回复
【求助】matlab保存的数据mat,打开的时候怎么用excel打开?
已经有4人回复
Matlab 画图后怎么获得图上的数据点
已经有6人回复
【求助】用matlab编程,需要将数据自检分类(高手进来指点下)
已经有5人回复
【求助】一个MATLAB程序,读不懂,老师说是用随机游走算pi的值【已完结】
已经有6人回复
【交流】实验动物按体重随机随机分组
已经有5人回复
【求助】matlab中保存计算数据的问题
已经有8人回复
请问如何从matlab中导出这张图数据
已经有4人回复

【答案】应助回帖
yqx1985(金币+4): 辛苦辛苦了 2011-09-05 23:51:03
|
我随手编个m文件给你试试吧。编的有点复杂了。呵呵。 clear all; data =rand(1,50); N_div = 10; nn =size(data); N=nn(2); %%%% randomly redistribute this N numbers IsRepeated = 1; RDis(1) = 0; for i =1:N IsRepeated = 1; while(IsRepeated == 1) J = floor(rand*N+1) ; if(i==1) IsRepeated = 0; end if(i>1) IsRepeated = 0; for j=1:i-1 if(J==RDis(j)) IsRepeated = 1; end end if(J>N) IsRepeated = 1; end end end RDis(i) =J; end %%% insert random blocks between numbers (balls). IsRepeated = 1; BDis(1) = 0; for i =1:N_div-1 IsRepeated = 1; while(IsRepeated == 1) J = floor(rand*(N-1)+1) ; if(i==1) IsRepeated = 0; end if(i>1) IsRepeated = 0; for j=1:i-1 if(J==BDis(j)) IsRepeated = 1; end end if(J>N-1) IsRepeated = 1; end end end BDis(i) =J; end BDis = sort(BDis); NumDis(1,1:BDis(1)) = RDis(1:BDis(1)); NumD (1) = BDis(1); for i=1:N_div-2 NumDis(i+1,1:BDis(i+1)-BDis(i)) =RDis(BDis(i)+1:BDis(i+1)); NumD (i+1) = BDis(i+1)-BDis(i); end NumDis(N_div,1:N-BDis(N_div-1)) = RDis(BDis(N_div-1)+1:N); NumD (N_div) = N-BDis(N_div-1); NumDis |

2楼2011-09-05 17:31:46

3楼2011-09-05 18:19:20
xiuyouxu
铁杆木虫 (职业作家)
- 应助: 43 (小学生)
- 金币: 16361.7
- 散金: 540
- 红花: 6
- 沙发: 2
- 帖子: 3207
- 在线: 580.4小时
- 虫号: 1256596
- 注册: 2011-04-06
- 性别: GG
- 专业: 数理统计

4楼2011-09-05 21:32:00
xiuyouxu
铁杆木虫 (职业作家)
- 应助: 43 (小学生)
- 金币: 16361.7
- 散金: 540
- 红花: 6
- 沙发: 2
- 帖子: 3207
- 在线: 580.4小时
- 虫号: 1256596
- 注册: 2011-04-06
- 性别: GG
- 专业: 数理统计

5楼2011-09-05 21:34:21
yqx1985
木虫 (著名写手)
云中仙
- 应助: 34 (小学生)
- 贵宾: 0.032
- 金币: 1608.8
- 散金: 1180
- 红花: 33
- 帖子: 1544
- 在线: 620.3小时
- 虫号: 550008
- 注册: 2008-04-22
- 性别: GG
- 专业: 药物设计与药物信息
|
程序写的不错,可以满足要求,不过还是有几点建议: (1)最好去掉 第一句 clear all 这个命令。 这个命令危害很大,往往做了半天的工作,可能在引用到含有该命令的语句时而前功尽弃;由于该命令的存在,你的脚本程序不能转化为一个函数应用,这导致你的程序虽然能完成功能,但一次只能生成一个可能的结果。而实际工作中,我们还是希望能够一次生成一系列的结果。如果将clear all去掉而强制性生成函数后,你的代码产生的结果会随着迭代的增加而出错,直至达到稳定的结果(你可以尝试下),具体为什么我没有细看。 (2)你的代码中有一段是生成随机排列的不重复整数(%% randomly redistribute this N numbers),你为此采用了一些循环判断的方法,实际上可以通过下面简单的方法实现: RAND=rand(N,1); [S,RDis]=sort(RAND); 或 RDis=randperm(N); (3)尽量在引入未知变量时,对变量提前给出定义和内存分配 -------------------------------------------------------------------------------------------------------------- 总之感谢您的热情帮助! |

6楼2011-09-06 00:09:20
yqx1985
木虫 (著名写手)
云中仙
- 应助: 34 (小学生)
- 贵宾: 0.032
- 金币: 1608.8
- 散金: 1180
- 红花: 33
- 帖子: 1544
- 在线: 620.3小时
- 虫号: 550008
- 注册: 2008-04-22
- 性别: GG
- 专业: 药物设计与药物信息

7楼2011-09-06 00:17:43

8楼2011-09-06 10:07:32
yqx1985
木虫 (著名写手)
云中仙
- 应助: 34 (小学生)
- 贵宾: 0.032
- 金币: 1608.8
- 散金: 1180
- 红花: 33
- 帖子: 1544
- 在线: 620.3小时
- 虫号: 550008
- 注册: 2008-04-22
- 性别: GG
- 专业: 药物设计与药物信息
|
function BlockOfEachVariable=RandVG(Lvariable,Lblock,PopulationSize,Population) % % Lvariable is the length of variable, Lblock is the length of block % Purpose: Generate Lblock block for Lvariable Variable in PopulationSize % Through This Process, All Variable Will Find It's Block according Population % Such as BlockOfEachVariable=2 3 1 % 1 1 3 % 2 3 2 % It means that in 1st chromosome, Variable 1-3 belong to 2,3,1 block respectively % in 2nd chromosome, Variable 1-3 belong to 1,1,3 block respectively % in 3rd chromosome, Variable 1-3 belong to 2,3,2 block respectively % The PopulationSize is 3, which is equall to the row of Population %% You can get a rand BLock marix with row to PopulationSize and column to %LBlock if Population is unspecific; If Population is specific, RandVG tries to convert %Population to BLock marix. Here, Population is a binary matrix, which is used for %genetic algorithm to optimum BLock marix for a certain purpose; If the cassette is %specific, a MC methode is used for getting rand BLock marix. if nargin<4,Lgrid=length(dec2bin(Lblock));Population=randint(PopulationSize,Lgrid*Lvariable);end %% ---- Used When Composition of Each Variable is Specific, i.e., % Lblock=[1,2,3,4],Which indicate variable number is 10(sum(Lblock)) and one % variable in one cassette, and two variables in another cassette, three % varlable in the third cassette....At other times, Block is just a number. if length(Lblock)~=1 Rand=rand(Lvariable,PopulationSize);[a2,a3]=sort(Rand); for i=1 opulationSizefor o=1:length(Lblock) % com,[1,2,3],[2,2,2]... BlockOfEachVariable(a3((sum(Lblock(1 ))-Lblock(o)+1):sum(Lblock(1 )),i),i)=o; end end BlockOfEachVariable=BlockOfEachVariable'; return end; %% ---- Lgrid=length(dec2bin(Lblock));% A Block Contain Lgrid bin site % q=randint(PopulationSize,Lgrid*Lvariable); Max=ones(1,Lgrid);Max=bin2dec(num2str(Max)); for o=1 opulationSizefor i=1:Lvariable % a=q(o,3*i-2:3*i); a=Population(o,Lgrid*(i-1)+1:Lgrid*i); b=num2str(a); v(o,i)=bin2dec(b); end end w=zeros(PopulationSize,Lvariable); for i=1:Lblock w(find(v>=Max/Lblock*(i-1)&v<=Max/Lblock*i))=i; end BlockOfEachVariable=w; |

9楼2011-09-08 09:27:53
yqx1985
木虫 (著名写手)
云中仙
- 应助: 34 (小学生)
- 贵宾: 0.032
- 金币: 1608.8
- 散金: 1180
- 红花: 33
- 帖子: 1544
- 在线: 620.3小时
- 虫号: 550008
- 注册: 2008-04-22
- 性别: GG
- 专业: 药物设计与药物信息

10楼2011-09-08 09:30:00













回复此楼
yqx1985

opulationSize
))-Lblock(o)+1):sum(Lblock(1