查看: 3438|回复: 6|关注: 0

[已解决] 多个向量随机抽取1个数成新的向量,取样1500次不重复

[复制链接]

新手

12 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
本帖最后由 厚积薄发2012 于 2017-9-14 14:49 编辑

我也是想从每个数组中随机取一个数,然后组合成11*1数组,取样1500次,关键是每行不重复,如何得到最后的1500*11的矩阵,
大神们有没有好的办法。
请各位大神指导!谢谢!
var1=[500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000];
var2=[0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60];
var3=[0.5, 1.0, 1.5, 2.0, 2.5];
var4=[0.5, 0.6, 0.7, 0.8, 0.9, 1.0];
var5=[200, 300, 400, 500];
var6=[2.0, 3.0, 4.0, 5.0, 6.0];
var7=[4000, 5000, 6000, 7000, 8000];
var8=[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
var9=[2, 3, 4, 5, 6, 7, 8];
var10=[0.05, 0.075, 0.10, 0.125, 0.15];
var11=[0.3, 0.4, 0.5, 0.6, 0.7];


回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

130 麦片

财富积分


50500


6

主题

131

帖子

23

最佳答案
  • 关注者: 4
发表于 2017-9-14 16:42:01 | 显示全部楼层
本帖最后由 leavor 于 2017-9-14 16:53 编辑

试试这个笨办法
clc
clear
close all

var1=[500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000];
var2=[0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60];
var3=[0.5, 1.0, 1.5, 2.0, 2.5];
var4=[0.5, 0.6, 0.7, 0.8, 0.9, 1.0];
var5=[200, 300, 400, 500];
var6=[2.0, 3.0, 4.0, 5.0, 6.0];
var7=[4000, 5000, 6000, 7000, 8000];
var8=[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
var9=[2, 3, 4, 5, 6, 7, 8];
var10=[0.05, 0.075, 0.10, 0.125, 0.15];
var11=[0.3, 0.4, 0.5, 0.6, 0.7];

data = cell(1,11);
dataCreate = zeros(1500,11);%存储生成的数据,每行是一组数据
dataIndex = zeros(1500,11);%存储生成的数据在data中的索引
for i=1:11
    data{i} = eval(strcat('var',num2str(i)));
end
i=1;
while i<=1500
    indexTemp=[];
    for j=1:11
        index = randi([1,length(data{j})],1,1);
        dataTemp(j) = data{j}(index);
        indexTemp = [indexTemp index];
    end
    lia = ismember(dataIndex,indexTemp,'rows');
    liaSum = sum(lia);
    if liaSum == 0
        dataCreate(i,:) = dataTemp;
        dataIndex(i,:) = indexTemp;
        i = i + 1;
    end
end
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

权威

9199 麦片

财富积分



11

主题

1万

帖子

1997

最佳答案
  • 关注者: 592
发表于 2017-9-14 17:09:10 | 显示全部楼层 |此回复为最佳答案
一般while就是一次。
  1. clear
  2. var1=[500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000];
  3. var2=[0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60];
  4. var3=[0.5, 1.0, 1.5, 2.0, 2.5];
  5. var4=[0.5, 0.6, 0.7, 0.8, 0.9, 1.0];
  6. var5=[200, 300, 400, 500];
  7. var6=[2.0, 3.0, 4.0, 5.0, 6.0];
  8. var7=[4000, 5000, 6000, 7000, 8000];
  9. var8=[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
  10. var9=[2, 3, 4, 5, 6, 7, 8];
  11. var10=[0.05, 0.075, 0.10, 0.125, 0.15];
  12. var11=[0.3, 0.4, 0.5, 0.6, 0.7];
  13. while(1)
  14. for k=1:1500
  15.     var(k,:)=[var1(randi(numel(var1),1)),var2(randi(numel(var2),1)),var3(randi(numel(var3),1)),var4(randi(numel(var4),1)),var5(randi(numel(var5),1)),...
  16.         var6(randi(numel(var6),1)),var7(randi(numel(var7),1)),var8(randi(numel(var8),1)),var9(randi(numel(var9),1)),var10(randi(numel(var10),1)),var11(randi(numel(var11),1))];
  17. end
  18. var=unique(var,'rows');
  19. if size(var,1)==1500
  20.     break;
  21. end
  22. end
复制代码
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2017-9-14 17:50:40 | 显示全部楼层
leavor 发表于 2017-9-14 16:42
试试这个笨办法
clc
clear

谢谢回复!方法可行
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2017-9-14 17:52:17 | 显示全部楼层
jingzhaos 发表于 2017-9-14 17:09
一般while就是一次。

谢谢回复。方法可行。
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

130 麦片

财富积分


50500


6

主题

131

帖子

23

最佳答案
  • 关注者: 4
发表于 2017-9-14 17:53:44 | 显示全部楼层
厚积薄发2012 发表于 2017-9-14 17:50
谢谢回复!方法可行

建议用3楼的方法,效率更高,我这个仅供参考
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2017-9-15 17:39:00 | 显示全部楼层
谢谢两位指导。
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表