【问题标题】:randomized vector of integers selected from a decided range in matlab [duplicate]从matlab中确定的范围中选择的整数的随机向量[重复]
【发布时间】:2020-05-28 18:55:09
【问题描述】:

如何创建一个向量,其中包含从确定范围中提取的特定值的#? 只要它们随机发生,重复就会受到欢迎。

例如一个包含 5 个值的向量,所有这些值都是 1 到 80 之间的整数

ps 我正在使用 2019 版的 Matlab

【问题讨论】:

  • 检查 MATLAB 的 randi 方法。
  • “随机”可能是指均匀分布(所有值的可能性相同)。您应该指定
  • 没错,但我找到了必要的代码,无需担心

标签: matlab


【解决方案1】:

你可以使用rand函数; rand 给出一个介于 0 和 1 之间的随机值,但对于一个范围,您可以使用以下公式。

lowest_val = -10
range = 20 % [-10, 10]
rand_vec = lowest_val + (range)*rand(10,1) % here the range is [-10, 10]

(20)*rand(10,1) 会给出一个 0 到 20 之间的随机值,加上 -10,范围变为 -10 到 10。

对于您的情况,您可以使用

lowest_val = 1
range = 79 % [1, 80]
rand_vec = lowest_val + (range)*rand(10,1)

(80)*rand(10,1) 会给出一个 0 到 79 之间的随机值,加上 1,范围变为 1 到 80

如果您不想重复,可以使用randperm

【讨论】:

    【解决方案2】:

    取决于它们必须是整数还是可以是“实数”(浮点)数。另外,是否要包含值 1 和 80?

    无论如何,有这个matlab 帮助非常有用。

    通常在处理随机数时,您需要初始化随机生成器。

    rng(0,'twister');
    

    这是为了让您能够重现您的结果,因此请注意,如果您始终使用相同的种子(在本例中为 0),您将始终获得相同的结果。 随机化的典型技巧是使用当前时间作为种子,

    rng(posixtime(datetime('now')),'twister');
    

    鉴于你说你想要一个由 5 个数字组成的数组,

    N = 5;
    

    rand(N,M) 在区间(0,1) 中返回一个由NxM 均匀分布的数字组成的矩阵,那么您需要进行以下转换以将它们带到您的区间(a,b)(在您的情况下为(1,80)

    a = 1;
    b = 80;
    r = (b-a).*rand(N,1) + a;
    

    输出:

    >> a = 1;
    b = 80;
    r = (b-a).*rand(N,1) + a
    
    r =
    
       65.5670
       69.6269
        7.6704
       32.5828
       21.5298
    

    如果您正在寻找区间 [1,80] 中的整数(请注意,现在区间包括值 1 和 80),那么就可以了,

    r = randi(80,N,1);
    

    输出:

    >> r = randi(80,N,1)
    
    r =
    
        65
        35
        73
        15
        22
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-09
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多