rand
- rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
- 括号参数为生成随机数的维度
import numpy as np
np.random.rand(4, 2)
Out[66]:
array([[0.84397828, 0.39929488],
[0.66913164, 0.33996681],
[0.70253518, 0.36046703],
[0.21090572, 0.79527155]])
randn
根据给定的形状,从均值为0,方差为1的高斯分布中随机采样浮点型数据,作为返回结果,若没有给定参数,则只随机采样一个数据返回。
np.random.randn()
Out[67]: 0.15348353234002365
np.random.randn(2, 4)
Out[68]:
array([[-0.0788733 , 0.58486124, -0.85670253, 1.21949825],
[-0.25676356, -1.11947588, 0.69715979, -0.38886418]])
若要随机生成以μ为均值,σ²为方差的高斯分布数据,则可以使用:
σ * np.random.randn(…) + μ
>>> 3 + 2.5 * np.random.randn(2, 4)
array([[-4.49401501, 4.00950034, -1.81814867, 7.29718677],
[ 0.39924804, 4.68456316, 4.99394529, 4.84057254]])
randint
根据给定的形状,随机生成 [low, high) 之间的整数,若没有给定high参数,则随机生成 [0, low) 之间的整数,若size没有给定,则只返回一个整数。
>>> np.random.randint(6)
5
>>> np.random.randint(2, 6, (3,4))
array([[3, 2, 3, 2],
[3, 3, 5, 5],
[4, 4, 4, 4]])
choice
从给定的数据中选取给定形状的数据。
原型:np.random.choice(a, size=None, replace=True, p=None)
>>> np.random.choice(5,3)
array([2, 0, 2])
>>> np.random.choice(5,4)
array([4, 2, 0, 2])
>>> np.random.choice([2,5,6,3,8],size=[2,2])
array([[5, 8],
[5, 2]])
replace : boolean, optional
replace=True时表示有放回的取数,replace=False时表示无放回的取数,通俗的讲就是为True时一个元素可以多次选取,为False时每个元素只能选取一次。默认为True
# 当size大小(6)不大于a的大小(6)时,正常:
>>> np.random.choice([1,2,3,4,5,6], size=[2,3], replace=False)
array([[5, 2, 6],
[4, 1, 3]])
# 当size大小(9)大于a的大小(6)时,报错:
>>> np.random.choice([1,2,3,4,5,6], size=[3,3], replace=False)
Traceback (most recent call last):
File “”, line 1, in
File “mtrand.pyx”, line 1168, in mtrand.RandomState.choice
ValueError: Cannot take a larger sample than population when ‘replace=False’
shuffle
将给定的数据进行随机排序,使数据无序;若为多维数组,则只对第一维进行洗牌,其余维不变。
>>> # 对于一维数组或者列表
>>> a = [1,2,3,4,5]
>>> np.random.shuffle(a)
>>> a
[5, 3, 1, 2, 4]
>>> # 对于二维数组
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> np.random.shuffle(a)
>>> a
[[1, 2, 3], [7, 8, 9], [4, 5, 6]]
random
根据给定的形状,随机生成 [0.0, 1.0) 之间的浮点型数据。
原型:np.random.random(size=None, dtype=‘d’, out=None)
>>> np.random.random()
0.5375354013215928
>>> np.random.random(size=(2,3))
array([[0.64866742, 0.67112336, 0.94198564],
[0.94086871, 0.28827241, 0.73878114]])
uniform
原型:np.random.uniform(low=0.0, high=1.0, size=None)
参数:
low : float or array_like of floats, optional
输出数据的下限值,默认为0.0
high : float or array_like of floats
输出数据的上限值,默认为1.0
size : int or tuple of ints, optional
输出数据的形状。若为指定,则只输出一个数据;若size没有指定,而low或hige指定为非常量(比如列表),则返回np.broadcast(low, high).size形状的数据,如low=1,high=[2,3,4,5],则返回[1,4]形状的数据
未指定任何参数,默认返回[0.0, 1.0)之间的一个数据:
>>> np.random.uniform()
0.5158813519405029v
指定输出数据的形状为2行3列:
>>> np.random.uniform(size=[2,3])
array([[0.22826952, 0.3800571 , 0.42333292],
[0.39361266, 0.42119074, 0.96617646]])
未指定size时,指定high为一个非常量,输出数据的形状由low和hige的形状而定:
# 指定hige为一个非常量
>>> np.random.uniform(low=0, high=[1,2,3,4])
array([0.77303588, 1.48993969, 1.19249964, 1.51544523])
# 指定一个非一维的非常量high
>>> np.random.uniform(high=[[2,4],[6,8]])
array([[1.73997403, 0.74716176],
[3.87522426, 7.9060629 ]])
# 指定low为一个非常量
>>> np.random.uniform(low=[0,1,2,3], high=9)
array([2.14857954, 4.35577815, 5.43381644, 4.37369653])
# 同时指定low和high为非常量,此时low和high的形状必须相同
>>> np.random.uniform(low=[1,3,5,7], high=[2,4,6,8])
array([1.9812424 , 3.51672234, 5.63879449, 7.2477922 ])
# 同时指定low和hige为非常量,且都不是一维的
>>> np.random.uniform(low=[[1,3],[5,7]], high=[[2,4],[6,8]])
array([[1.26686063, 3.99613498],
[5.16915922, 7.32881325]])
注:若同时指定low和high为非常量,则low和hige的形状必须一致,否则报错