Matlab两段代码对比(学习自用)

在研究智能优化算法如TSP问题时,通常需要生成随机初始解。同样,在BP神经网络中,数据应随机划分为训练集和测试集以确保分布均匀。文章提到,使用`randperm`函数在MATLAB中直接生成随机整数序列比先生成随机数再排序更高效,尽管在特定测试中后者可能更快,但代码简洁性得到提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习智能优化算法的时候,对于TSP问题,我们经常要生成初始解,即给出一个随机序列代表初始时旅行城市的先后顺序。

同样的,在BP神经网络中,往往需要需要将数据划分测试集和训练集,显然,简单的按照顺序排列将前一部分数据给测试集,将后一部分给训练集,或者反过来,这样都是不合理的。比较合理的方式是事先给定训练集和测试集的个数,然后生成随机序列,对于这个随机序列执行上面的操作。这样可以使训练集和测试集都分散在原始数据中。

OK,上面都不是重点,重点是下面代码的分析。
老师给的参考程序是这样的

%从0-1之间随机排列2000个数,1x2000行向量,主要应用n,1-2000的随机数组
k=rand(1,2000);
[m,n]=sort(k);

%找出训练数据和预测数据
input_train=input(n(1:1900),:)';
input_test=input(n(1901:2000),:)';

上面的代码是事先生成一个0-1之间的随机数数列,然后对其排序后得到随机整数数列。事实上这样写是不简洁的而且耗时的,在matlab里就直接有这样一个函数randperm()可以直接生成随机整数数列。

n = randperm(N)
%n返回从1-N之间的数字随机排列的一个结果,常用来生成初始解

好吧,好像是第二种方式更耗时一点

tic
%方案1
% k=rand(1,20000000);
% [m,n]=sort(k);
%方案2
n = randperm(20000000);
toc

采用上述代码进行了测试
方案1:0.69s
方案2:0.77s

小丑了。。。
but,两行代码换成一行,还是简洁了的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值