【问题标题】:Generate random values between two set numbers在两个集合数字之间生成随机值
【发布时间】:2013-03-14 14:08:35
【问题描述】:

我的任务是生成 5000 个介于 -2 和 5 之间的随机数 然后计算这些值中有多少在 2 和 3 之间 这是我目前所拥有的:

randNums=rand(1,5000); %Generate 5000 random values between 0 and 1

randNums=randNums*7-2; %Get those random values to be between -2 and 5

我知道 7*1=7 和 0*7=0 所以 -2 从每个 = 7-2,但我完全理解如果数字介于 5,6 或 -6 和 1 之间,如何再次应用它。

【问题讨论】:

  • 请重新表述您的问题......如果数字在 (0,1) 中,那么所有数字都在 -2 和 5 之间
  • 有一个简单的函数:def howMany(): return 1000
  • 我的意思是生成介于 -2 和 5 之间的随机数并计算大于 2 和小于 3 的随机数
  • rand(1,5000) 将在 0-1 之间生成 5000 个随机数

标签: matlab random


【解决方案1】:

我的问题解读

您在区间 (0,1) 中有随机数。但是您需要(a,b)中的随机数。

解决方案

你只需要缩放和改变你的间隔。

缩放间隔: 区间 (a,b) 的大小/长度为 b-a。要重新调整间隔,您必须将所有随机值乘以 b-a。

移动间隔: 缩放区间后,区间 (0,b-a) 中有数字。您只需将数字 a 添加到其中即可移动所有数字。这导致区间 (a,b) 中的随机数。

【讨论】:

  • 好吧,比如说我要生成 1000 个从 4 到 7 的随机数,然后计算大于 5 和小于 6 的随机数,代码将是...... randNums=rand(1 ,5000); %生成4到7之间的5000个随机值 randNums=randNums*1+5; %让这些随机值在 5 到 6 之间是正确的吗?
【解决方案2】:

您所指的是“Linear Interpolation”。在某些库中,它被称为lerp,并且通常已实现

float lerp(float v0, float v1, float t) {
    return v0+(v1-v0)*t
}

所以在你的情况下,v0 是 -2,v1 是 7,t 是你想要插值的 0 到 1 之间的值。

【讨论】:

    【解决方案3】:
    numbers = random('unif', -2, 5, 1, 1000);
    count = sum(numbers > 2 & numbers < 3);
    

    【讨论】:

    • 我只在Octave 中遇到过这个问题,它一直在 Matlab 中工作。你可以写 'unif' 或 'Uniform' 以获得均匀分布
    • 这是有道理的,但我们假设对 count= 部分使用 if 语句
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 2014-03-20
    • 2014-10-02
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多