【python】random and np.radom

参考 Python从零开始系列连载,by 王大伟 Python爱好者社区

参考 Hellobi Live | 1小时破冰入门Python

参考 《简明python教程》

Note: 更多连载请查看【python】



1 Random

1.1 choice()

1.1.1 random.choice()

从序列中获取一个随机元素

import random
random.choice('Python大法好')   

结果为'法'

random.choice(['a','b','c'])  # 列表

结果为'c'

random.choice(('a','b','c')) # 元组

结果为'b'


1.1.2 np.random.choice()

numpy.random.choice(a, size=None, replace=True, p=None)

  • 从给定的一维数组中生成随机数
  • 参数: a为一维数组类似数据或整数;size为数组维度;p为数组中的数据出现的概率
  • a为整数时,对应的一维数组为np.arange(a)
import numpy as np
np.random.choice(5,size=(3,2))

output
在这里插入图片描述

replace = True 的时候,抽样会有重复,=False的时候不会

import numpy as np
list1 =[1,2,3,4,5]
list2 = np.random.choice(list1,4,replace=False)
list2

Output

array([5, 2, 1, 4])

list1 =[1,2,3,4,5]
list2 = np.random.choice(list1,4,replace=True)
list2

Output

array([1, 3, 1, 5])

比较灵活的用法是,利用 replace = True 进行无中生有,例如 ReID 中的 num_instance

list1 = [1,2]
np.random.choice(list1, 4, replace=True)

output

array([1,2,1,2])

1.2 randint()

1.2.1 random.randint()

用于生成一个指定范围内的整数,能取到左右两个边界的值

import random
print(random.randint(2,3))

取得到3

1.2.2 np.random.randint()

np.random.randint(low, high=None, size=None) 返回随机整数,范围区间为[low,high)

import numpy as np
print(np.random.randint(2,3))

取不到3

1.2.3 np.random.random_integers()

numpy.random.random_integers(low, high=None, size=None)

  • 返回随机整数,范围区间为[low,high],包含low和high
  • 参数:low为最小值,high为最大值,size为数组维度大小
  • high没有填写时,默认生成随机数的范围是[1,low]

1.2.4 np.random.rand()

numpy.random.rand(d0,d1,…,dn)

  • rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
  • dn表格每个维度
  • 返回值为指定维度的array

1.2.5 np.random.randn()

numpy.random.randn(d0,d1,…,dn)

  • randn函数返回一个或一组样本,具有标准正态分布。
  • dn表格每个维度
  • 返回值为指定维度的array

1.3 random()

1.3.1 random.random()

用于生成一个 0 到 1 的随机符点数: 0 <= n < 1.0

import random
random.random()

结果为0.3238482303759488

1.3.2 np.random.random()

numpy.random.random(size=None)

生成 [0,1) 之间的浮点数

1.4 random.randrange()

在这里插入图片描述
https://www.runoob.com/python/func-number-randrange.html

从序列中获取一个随机数

random.randrange(10,100,2)#从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数

结果为

50


1.5 random.sample()

从指定序列中随机获取指定长度的片断,不改变原来序列顺序

list2 = [i**2 for i in range(0,10)]
random.sample(list2,3)

结果为

[4, 49, 0]

看看list2有没有改变

list2

结果为
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
没有改变,所以sample函数不会修改原有序列


1.6 random.shuffle()

将一个列表中的元素打乱

list1 = [1,2,3,4,5,6]
random.shuffle(list1)
list1

结果为
[5, 6, 4, 3, 1, 2]


1.7 random.uniform()

uniform() 方法将随机生成下一个实数,它在 [x, y) 范围内。

random.uniform(2,3)

结果为

2.1728175107763374

2 组合

2.1 随机产生指定区间和长度的整数

import random
def random_int_list(start, stop, length):
    start, stop = (int(start), int(stop)) if start <= stop else (int(stop), int(start))
    length = int(abs(length)) if length else 0
    random_list = []
    for i in range(length):
        random_list.append(random.randint(start, stop)) # 核心
    return random_list

测试

random_float_list(1.0,2.0,5)

output

[1.08,
 1.6200000000000006,
 1.7000000000000006,
 1.9500000000000008,
 1.7800000000000007]

2.2 随机产生指定区间和长度的浮点数

import random
def random_float_list(start, stop, length):
    start, stop = (start, stop) if start <= stop else (stop,start)
    length = int(abs(length)) if length else 0
    random_list = []
    for i in range(length):
        random_list.append(np.random.choice(np.arange(start,stop,0.01))) # 核心
    return random_list

测试

random_int_list(1,10,5)

output

[2, 10, 7, 7, 9]

3 linspace() 等差数列

linspace()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。

x_data = np.linspace(-1,1,10)
x_data #(10,)

output

array([-1.        , -0.77777778, -0.55555556, -0.33333333, -0.11111111,
        0.11111111,  0.33333333,  0.55555556,  0.77777778,  1.        ])

加一维

x_data = np.linspace(-1,1,10)[:,np.newaxis]
x_data

output

array([[-1.        ],
       [-0.77777778],
       [-0.55555556],
       [-0.33333333],
       [-0.11111111],
       [ 0.11111111],
       [ 0.33333333],
       [ 0.55555556],
       [ 0.77777778],
       [ 1.        ]])

4 np.random.seed()

  • np.random.seed()的作用:使得随机数据可预测。
  • 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
import numpy as np
np.random.seed(155)
print(np.random.rand(5))
np.random.seed(155)
print(np.random.rand(5))
np.random.seed(0)
print(np.random.rand(5))

output

[0.65232633 0.92112296 0.17314591 0.62062509 0.10662668]
[0.65232633 0.92112296 0.17314591 0.62062509 0.10662668]
[0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]

Note: 更多连载请查看【python】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值