matlab 函数 c++ 复写之randperm

本文介绍了如何将 MATLAB 中的 randperm 函数转换为 C++ 实现,详细解析了 MATLAB 原始函数的工作原理,并展示了 C++ 中使用 std::random_shuffle 实现相同功能的代码示例。通过生成一定范围内的随机数,再进行排序,从而得到不重复的随机整数序列。此外,还提供了多个参考资料链接以供进一步学习。
摘要由CSDN通过智能技术生成

最近在写matlab代码转c++,会遇到一些重写的函数。

复写首先要了解randperm函数在matlab中的实现机理。
以下是函数原定义:

function p = randperm(n);
%RANDPERM Random permutation.
%   RANDPERM(n) is a random permutation of the integers from 1 to n.
%   For example, RANDPERM(6) might be [2 4 5 6 1 3].
%  
%   Note that RANDPERM calls RAND and therefore changes RAND's state.
%
%   See also PERMUTE.

%   Copyright 1984-2002 The MathWorks, Inc.
%   $Revision: 5.10 $ $Date: 2002/04/09 00:26:14 $

[ignore,p] = sort(rand(1,n));

所以代码是基于rand函数和sort函数实现的。

首先由rand函数生成随机数:

>> y=rand(1, 6)

y =

    0.4103    0.8936    0.0579    0.3529    0.8132    0.0099

然后sort进行排序并返回排序后的元素在原数组的位置。

>> [ignore,p] = sort(y)

ignore =

    0.0099    0.0579    0.3529    0.4103    0.8132    0.8936


p =

     6     3     4     1     5     2

rand默认升序排序。而最小的0.0099在原数组的位置是6,所以位置数组第一个值为6。

把位置数组p返回,就得到了1到n的无序数组。

但是如果传入两个参数,randperm[a,b]
实现的是从1~a中随机产生b个不重复的整数。
而我要实现的,就是双参数的形式。

那么接下来要看c++的实现:
参照百度百科中的实现思路
在这里插入图片描述

#include <algorithm>
#include <vector>

void randperm()
{
	
	vector<int> numbres;
	for (int i = 0; i < 100; i++)
	{
		numbres.push_back(i);
	}
	std::random_shuffle(numbres.begin(), numbres.end());
	for (int j = 0; j < 10; j++)
	{
		cout << numbres[j]  << endl;
	}
}

生成100个随机数,打乱后取前10个。即完成了从1-100中随机取10个数的功能。

除此之外,还有很多方法。

参考:
https://www.jianshu.com/p/fd23141df09a
https://www.cnblogs.com/salan668/p/3652532.html
https://blog.csdn.net/andy_songlin/article/details/6552674
https://www.cnblogs.com/afarmer/archive/2011/05/01/2033715.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值