首页 新闻 会员 周边 捐助

matlab 使用错误randperm size必须为标量,如何解决,谢谢~

0
悬赏园豆:5 [已解决问题] 解决于 2018-01-12 09:14

目的是为了生成4个随机不重复的随机数,存入x(i,:)

Xmax=999;

Xmin = 1;

a = randperm(Xmax-Xmin);

x(i,:) = Xmin + a(1:4);

 

可是报错:

错误使用 randperm
Size 输入必须为标量。

出错 main (line 21)
a = randperm(Xmax-Xmin);

问题补充:

新手一枚 = =

GALI17的主页 GALI17 | 初学一级 | 园豆:96
提问于:2018-01-11 19:09
< >
分享
最佳答案
0

for i =1:4
a(i,:) = rand(1,4);
end
这样就好了

收获园豆:5
BUTTERAPPLE | 老鸟四级 |园豆:3190 | 2018-01-11 20:09

原来是使用rand的,但这样取整的时候容易出现重复的整数,所以才改成上面写的,然后就报错了

GALI17 | 园豆:96 (初学一级) | 2018-01-11 20:25

@咖喱free: 那这样就可以了

for i =1:4
    a(i,:) = randperm(999,4);
end
a
a =

   554    42   800   669
   201    15   761   566
   654   634   733   884
   666   121   712   446
BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2018-01-11 20:32

@BUTTERAPPLE: 

D = 4;
Xmax = 500*ones(1,D);
Xmin = ones(1,D);
N = 50;
for i = 1:N
a = Xmax - Xmin;
X(i,:) = Xmin + randperm(a,D);
end

 

奇怪了,但是这样就不行,又继续报错:

错误使用 randperm
输入必须为非负标量整数。

出错 main (line 10)
X(i,:) = Xmin + randperm(a,D);

GALI17 | 园豆:96 (初学一级) | 2018-01-11 21:32

@咖喱free: 你这里的a 是个 1X4 阶的矩阵,当然不能放在 randperm 里面啦,你把

X(i,:) = Xmin + randperm(a,D); 换成 X(i,:) = Xmin + randperm(a(1),D); 这就可以了

BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2018-01-11 22:50

@BUTTERAPPLE: 啊,原来是这里错了,谢谢你~

GALI17 | 园豆:96 (初学一级) | 2018-01-12 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册