今天在写一个随机生成稀疏向量的程序的时候,看到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]

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐