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

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐