np.random.normal()
np.random.normal()的意思是一个正态分布,normal这里是正态的意思。我在看孪生网络的时候看到这样的一个例子:
numpy.random.normal(loc=0,scale=1e-2,size=shape) ,意义如下: **参数loc(float):**正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布, **参数scale(float):**正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。 **参数size(int 或者整数元组):**输出的值赋在shape里,默认为None。
import numpy as np
k = np.matrix([1, 2, 3, 4], )
print(np.shape(k))
print(k.shape[0])
print(k.shape[1])
sigma = 0.1
X = np.matrix([1, 2, 3, 4],)
scalingFactor1 = np.random.normal(loc=1.0, scale=sigma, size=(1, X.shape[1]))
scalingFactor2 = np.random.normal(loc=1.0, scale=sigma, size=(1))
print(scalingFactor1)
print(scalingFactor2)
矩阵的乘法运算
np.matmul()和@
matmul是matrix multiply的缩写,所以即是专门用于矩阵乘法的函数。 另外,@运算方法和matmul()则是一样的作用,相当于简便写法。
A = np.array([[1,2,3],
[4,5,6]])
B = np.array([[1,2],
[3,4],
[5,6]])
print(np.matmul(A, B))
print(A @ B)
numpy中的ones()函数
ones()返回一个全1的n维数组,有三个参数: shape(用来指定返回数组的大小)、 dtype(数组元素的类型)、 order(是否以内存中的C或Fortran连续(行或列)顺序存储多维数据)。 后两个参数都是可选的,一般只需设定第一个参数。和zeros一样
k = np.matrix([[1, 2, 3, 4],
[1, 2, 3, 4]])
a = np.ones(k.shape[0])
b = np.ones((k.shape[0],1))
print(a)
print(b)
汇总举例,与源码中的scaling对应
sigma = 0.1
k = np.matrix([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
scalingFactor = np.random.normal(loc=1.0, scale=sigma, size=(3, k.shape[1]))
chengzi = np.ones((k.shape[0], 3))
myNoise = np.matmul(chengzi, scalingFactor)
print(scalingFactor)
print(chengzi)
print(myNoise)
numpy.random.choice(a, size=None, replace=True, p=None)
从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组 **参数replace,**用来设置是否可以取相同元素,True表示可以取相同数字;False表示不可以取相同数字。默认是True **参数p,**p实际是个数组,大小(size)应该与指定的a相同,用来规定选取a中每个元素的概率,默认为概率相同
interval = 20
sig = np.matrix([[2.97,2.99,2.90,2.96],
[2.97,2.99,2.90,2.96],
[2.97,2.99,2.90,2.96]])
for col in range(sig.shape[1]):
offset = np.random.choice(range(-interval, interval))
print(col,offset/1000 )
sig[:, col] += offset / 1000
print(sig)
|