今天在写一个随机生成稀疏向量的程序的时候,看到matlab中用randperm()函数,例如:
>> randperm(4)
ans =
1 4 3 2
randprem(4)就是生成1~4之间的不重复的随机数,当然我们可以理解为将1~4之间的4个整数的顺序随机打乱。
那么我就在想python中是否有类似的函数呢?
还真的找到替代方案了,那就是标准库random中的一个函数:random.sample
import random
list = [0,1,2,3,4]
rs = random.sample(list, 2)
print(rs)
print(list)
输出:
[3, 4]
[0, 1, 2, 3, 4]
可见random.sample用于截取列表的指定长度的随机数,但是不会改变列表本身的排序。
因此我们要生成0~N之间的不重复的指定长度L的随机整数,可以使用:random.sample(range(0, N), L),例如我要生成0~20之间的20个随机整数:
a = random.sample(range(0, 20), 20)
>>> a
[9, 12, 11, 7, 8, 10, 6, 13, 2, 16, 0, 1, 14, 18, 4, 15, 3, 19, 17, 5]