【问题标题】:Issue when generate random vectors with limits on matlab生成具有 matlab 限制的随机向量时的问题
【发布时间】:2014-11-15 22:48:01
【问题描述】:

我有一个问题,我想生成一个 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

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

【问题讨论】:

  • 你想用 C++ 还是 Matlab 来做这个?为什么它被标记为两者?
  • matlab 基于 c++ 或 c 并且是推荐的标签,如果我错了,请见谅
  • 完全不需要道歉——只是想确定你真正想要什么。

标签: c++ matlab random


【解决方案1】:

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

randperm(10, 4) - 1

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

【讨论】:

  • 我尝试过,但是在运行应用程序时,它崩溃了
  • 这一行应该替换整个generar() 函数。
【解决方案2】:

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

randsample(10, 4)' - 1

它从总体中抽取 4 个随机数,无需替换且权重相同。这可能比randperm(10, 4) - 1 慢,因为它的真正优势在于能够为更复杂的示例传递人口向量。

也可以使用randsample(pop, k) 调用它,其中pop 是您要从中抽取大小为k 的随机样本的总体向量。因此,对于您的情况,可以这样做:

randsample(0:9, 4)

结果将具有与总体向量相同的单例维度,在本例中为行向量。 只是为了提供另一种解决方案并让您与randsample()联系。

【讨论】:

  • 我会试着告诉你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2013-10-15
相关资源
最近更新 更多