在Julia中生成指定范围内的随机整数

53

我正在从MATLAB迁移到Julia,并尝试在1:n范围内生成随机整数。

对于n<21rand(r[1:n])可以使用。

但是对于n>20的情况,例如rand(r[1:21]),我会收到以下提示:

ERROR: BoundsError() in getindex at range.jl:121

1
“r”是什么?是一个20个元素的向量吗?如果我的理解正确,“rand(1:n)”就足够了。 - mbauman
2
什么是 r?尝试使用 rand(1:21) - jverzani
1个回答

78

您可以将范围作为第一个参数传递给rand函数,例如rand(1:n):

julia> rand(1:10)
7

julia> rand(1:10,10,10)
10x10 Array{Int64,2}:
 10   2  5  8   5   5  3   7   1   3
  5   1  4  2   4   4  1   6   6   9
  8   1  3  9   4   8  7   8   7  10
  3   8  1  5   7   9  7   8  10   7
  5   8  5  6   6   2  2   7   4   3
 10   4  8  8  10   5  1  10   5   1
  6   1  8  1   6   5  7  10   6  10
  5  10  2  5   4   5  4   1   3   9
  5   4  6  4   4   1  7   8   1   5
 10   2  6  4   3  10  7   3   8   7

通常情况下,使用通用的rand函数时第一个参数都是"样本来源",可以是一个值范围或者在Distributions.jl中定义的分布对象。


1
rand(S) 使用均匀分布还是其他概率分布?我的意思是,如果我想生成均匀的随机整数,通常会使用 rand(Uniform(1, n)),然后应用 ceil(Int, ...)floor(Int, ...)。但我认为,如果采样是均匀的话写 rand(1:n) 更加正确。 - Ribz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接