如何随机不放回的选出两个元素

如题
除了以下方法

#1
julia> a = [1; 2; 3; 4]
4-element Array{Int64,1}:
 1
 2
 3
 4

julia> using Random

julia> shuffle(a)[1:2]
2-element Array{Int64,1}:
 1
 3

#2
julia> x1, x2 = rand(a, 2)
2-element Array{Int64,1}:
 3
 3

julia> while x1 == x2
           x1, x2 = rand(a, 2)
       end

julia> x1, x2
(2, 4)

还可以这样

julia> using Combinatorics

julia> a=collect(1:4)
4-element Array{Int64,1}:
 1
 2
 3
 4

julia> rand(collect(combinations(a,2)))
2-element Array{Int64,1}:
 3
 4

1 个赞

是能解决, 有点复杂感觉. 就是不知道有没有我现在需求的函数能够直接解决了… :rofl:

using StatsBase: sample
sample(1:4, 2; replace=false)

Sample without replacement.

好坑人。:grinning:(:slight_smile:) :laughing:

6 个赞

对,我写的那个确实坑,你这个不错,我当时看到选出两个元素,就想到排列组合了,其实应该是抽样,用 Stats 的函数就好。 :rofl:

:+1::+1::+1::+1::+1::+1::+1::+1:

一种shuffle下标的方式:

using Random

inds = randperm(length(a))[1:2]
a[inds]

超慢。不要这样啦

1 个赞

但是至少可用,不是吗,就像我写的那个,也超慢,但是可用 :rofl:

我一开始说的方法也能用,就是想找确实存在的轮子,效率也不错的。学习到了 :100: