matlab函数c++复写之randperm 最近在写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个不重复的整数。
⽽我要实现的,就是双参数的形式。
matlab生成随机数
那么接下来要看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(), d());
for (int j = 0; j < 10; j++)
{
cout << numbres[j]  << endl;
}
}
⽣成100个随机数,打乱后取前10个。即完成了从1-100中随机取10个数的功能。除此之外,还有很多⽅法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。