知识点一、numpy中生成随机样本点的方法
(1)1、使用numpy.random.rand(d0, d1, ....dn):方法
生成指定形状的数组,其元素值是在均匀分布[0, 1]之间随机生成,其中d0, ...dn表示的是数组的大小(也就是维数,只有一个数字时默认是一维的),如果不指定大小,默认返回一个随机数值。数组默认的返回类型是float.如果指定100,那么返回一个1*100的一维数组。
例如:
-
w0 = np.random.rand()
-
print w0, "\n"
-
-
w00 = np.random.rand( 2, 3)
-
print w00, "\n"
-
输出:
-
0.528211605811 #0-1之间的随机值
-
-
[[ 0.89478507 0.81066081 0.04658165] #0-1之间的随机值
-
[ 0.88438714 0.76890682 0.86752058]]
2、numpy.random.randn(d0, d1, ...dn):
从标准正态分布中返回一个随机样本。
<1>、无参数
-
w1 = np.random.randn()
-
print w1, "\n"
-
输出:
-0.755503212712
<2>指定返回样本的大小
-
w2 = np.random.randn(2, 3)
-
print w2, "\n"
-
输出:
-
[[ 0.34894362 -0.90593742 1.41079113]
-
[ -0.67110078 -0.21309708 1.01333301]]
样式: sigma * numpy.random.randn(d0, ...,dn) + mu
-
例如:
-
sigma = 1.3
-
w3 = sigma * np.random.randn( 2, 3)
-
print w3
-
输出:
-
[[ 1.12659049 -2.13454097 -0.84336796]
-
[ -0.00758082 -0.52353856 0.9649422 ]]
#等价于np.random.randint(0,10,3)
#生成0-10的3个随机整数,只有一个数字3表示是生成一个1*3的一维矩阵
输出: array([6, 7, 7]) #为1*3的矩阵
2) np.random.randint(0,10,size=(3,3))
输出:
Out[351]:
array([[5, 1, 4],
[2, 8, 4], #为3*3的矩阵
[4, 2, 3]])4、numpy.random.shuffle()
例如:
x=['Python','data','random','Mining','good']
random.shuffle(x) # 用于将一个列表中的元素打乱,
print (x)
['Mining', 'Python', 'random', 'data', 'good']
例如:
lists=[1,2,3,4,5,6,7,8,10] #从指定序列中随机获取指定长度的片断
a=random.sample(lists,3)
print (a)
输出:[8, 6, 10]
6、numpy.random.normal(loc=0.0, scale=1.0, size=None)
先看伟大的高斯分布(Gaussian Distribution)的概率密度函数(probability density function):
对应于numpy中:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
- 1
参数的意义为:
loc:float
此概率分布的均值(对应着整个分布的中心centre)
scale:float
此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size:int or tuple of ints
输出的shape,默认为None,只输出一个值
- 1
- 2
- 3
- 4
- 5
- 6
我们更经常会用到的np.random.randn(size)
所谓标准正态分布(μ=0,σ=1μ=0,σ=1),对应于np.random.normal(loc=0, scale=1, size)
。
(2)使用numpy.linspace()方法
官方文档https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
Parameters(参数):
start : 序列的起始点.
stop : 序列的结束点
num : 生成的样本数,默认是50。必须是非负。
endpoint : 如果True,'stop'是最后一个样本。否则,它不包括在内。默认为True。
retstep : 如果True,返回 (`samples`, `step`)
dtype :
第1个例子endpoint的使用:
import numpy as np
print(np.linspace(2.0, 3.0, num=5))
print(np.linspace(2.0, 3.0, num=5, endpoint=True))
print(np.linspace(2.0, 3.0, num=5, endpoint=False))
输出:
[ 2. 2.25 2.5 2.75 3. ]
[ 2. 2.25 2.5 2.75 3. ]
[ 2. 2.2 2.4 2.6 2.8]
从上面输出可以看出endpoint=True时,输出包含了“stop”这个样本点;endpoint=False时,输出不包括“stop”这个样本点;默认情况endpoint=True。
第2个例子retstep的使用:
import numpy as np
print(np.linspace(2.0, 3.0, num=5))
a = np.linspace(2.0, 3.0, num=5, retstep=True)
print(a)
print(a[0])
print(a[1])
输出:
[ 2. 2.25 2.5 2.75 3. ]
(array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
[ 2. 2.25 2.5 2.75 3. ]
0.25
retstep=True时输出了步长(step),此时步长为0.25
第3个例子:
import numpy as np
import matplotlib.pyplot as plt
N = 8
y = np.zeros(N)
x1 = np.linspace(0, 10, N, endpoint=True)
x2 = np.linspace(0, 10, N, endpoint=False)
plt.plot(x1, y, 'o')
plt.plot(x2, y + 0.5, 'o')
plt.ylim([-0.5, 1])
plt.show()
输出:
知识点二、numpy添加新的维度:newaxis
numpy中包含的newaxis可以给原数组增加一个维度
np.newaxis放的位置不同,产生的新数组也不同
一维数组
x = np.random.randint(1, 8, size=5)
x
Out[48]: array([4, 6, 6, 6, 5])
x1 = x[np.newaxis, :]
x1
Out[50]: array([[4, 6, 6, 6, 5]])
x2 = x[:, np.newaxis]
x2
Out[52]:
array([[4],
[6],
[6],
[6],
[5]])
由上图可知,把newaxis放在列的位置,就是增加一个列向量,放到行的位置就是增加一行。可以把1行5列的数组变成一个5行1列的数组。
高维数组
由上图可知,把newaxis放在第几个位置,就在该位置上增加一个维度。