C++随机打乱数组数据—应用于图像打乱

在研究图像分类的课题过程中,模型的训练需要将图像随机打乱。由于老师要求使用C++语言编写程序,因此编写一个随机打乱数组数据的程序,将数组元素替换为下标,可以实现图像打乱。例如,实现数组的数据从0,1,2,3,4,5转换到2,5,4,3,1,0。元素不变,次序改变。其步骤如下:

输入:样本数目num;存储图像原始下标数组ids[num],满足图像下标与数组下标一一对应,即ids[i]=i,i=1,2,...,num

输出:存储随机打乱下标的数组randIds[num],满足元素与ids相同,但是次序改变

步骤:

For i = num,num-1,...,1

随机抽取的元素下标 = rand() % i  目标:产生一个0~i的随机数

将该元素赋值到randIds

ids[随机抽取的元素下标] = ids[i-1] 目标:将抽取的元素替换

综上,其思想循环产生一个随机数,随机数是提取元素下标,随机数的范围从大到小,并不断将抽取的元素替换此次抽取的临界元素(下次抽取范围不再覆盖的元素)。

void main()
{
	int sampleNum = 10;//样本数目
	int * rand_ids = new int[sampleNum];//打乱下标

	//原始下标,图像
	int * ids = new int[sampleNum];
	for (int i = 0; i < sampleNum; i++)
		ids[i] = i;

	//打乱下标
	int j = 0;
	for (int i = sampleNum; i > 0; i--)
	{
		int tmpID = rand() % i;     //
		rand_ids[j++] = ids[tmpID]; //
		cout << ids[tmpID] << " "; 
		ids[tmpID] = ids[i-1]; 
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值