在matlab上生成带限制的随机向量时出现问题

时间:2014-09-22 02:58:41

标签: c++ matlab random

我有一个问题,我想生成一个包含4列和1行的表,并且使用0到9范围内的整数,不重复,每次运行时都是随机的。

到达此处,但我有一个问题我总是在第一个元素中生成0。我不知道如何限制0-9

谁能帮助我?

功能代码:

function [ n ] = generar(  )

n = [-1 -1 -1 -1];

    for i = 1:4
        r=abs(i);
        dig=floor((r-floor(r))*randn);
            while find (n == dig)
                r=r+1;
                dig=dig+floor(r-randn);
            end
        n(i)=dig;
    end
end

结果:

generar()

ans =

 0     3     9     6

generar()

ans =

 0     2     4     8

我不知道这篇文章是否重复,但我需要帮助解决我的具体问题。

2 个答案:

答案 0 :(得分:1)

所以假设你想要matlab,因为你提供的代码是matlab,你可以这样做:

randperm(10, 4) - 1

这将为您提供0-9中的4个唯一随机数。

答案 1 :(得分:0)

到达那里的另一种方法是randsample(n, k)其中n是一个整数,然后将从人口k中抽取大小为1:n的随机样本(作为一列向量)。所以对于你的情况,你会得到结果:

randsample(10, 4)' - 1

它从人口中抽取4个随机数而没有替换,并且都具有相同的权重。这可能比randperm(10, 4) - 1慢,因为它的真正强度来自能够传递人口向量以获得更复杂的例子。

或者,可以使用randsample(pop, k)来调用它,其中pop是您要绘制大小为k的随机样本的填充向量。因此,对于您的情况,可以这样做:

randsample(0:9, 4)

结果将具有与population-vector相同的单一维度,在这种情况下是行向量。 只是提供另一种解决方案,让您与randsample()联系。