给数组中的每个数据加上噪音的方法

给数组中的每个数据加上噪音的方法:

import numpy as np

a = np.arange(10).reshape(5,2)
a
Out[83]: 
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

假设原数组如上所示,为5行2列,那么想给每个数据都加上噪音可以一行代码完成:

np.random.normal(a, err)

其中err是欲设置的噪音的方差。

具体的理解就是:

如果对于np.random.normal这个方法,如果传入的参数是数组型的,比如第一个参数是[1, 2, 3], 第二个参数是数字型,第三个参数可选,如果第三个参数也传入,则该参数就必须是数字,因为这时候生成的数组的shape是(k, 3),k就是第三个参数值,数组的每一列分别满足均值为1,2和3,方差都为4的正态分布;

而如果第一个参数传入的是(m, n)的这种,那么第三个参数是无法指定的(目前我是这么感觉的),第二个参数,也就是scale,如果也要传入数组,那么形状必须和第一个参数相同,也即(m,n),否则只能传入标量数值,生成的结果也是(m,n)的数组,相当把数组中的每个数变成以该位置原数据为均值,以第二个参数为方差的有噪音的数据,这样就实现了给所有的数据都加上噪音。

下面是一个手写数字的加噪音应用实例:

from sklearn.datasets import load_digits
digits = load_digits()


def plot_digits(data):

    fig, ax = plt.subplots(4, 10, subplot_kw=dict(xticks=[], yticks=[]),
                           gridspec_kw=dict(wspace=0.1, hspace=0.1))
    for i, axi in enumerate(ax.flat):
        axi.imshow(data[i].reshape(8, 8), cmap='binary', 
                    interpolation='nearest', vmin=0, vmax=16)
    plt.show()

"""不加噪音画图"""
plot_digits(digits.data)

"""加噪音后画图"""
noisy = np.random.normal(digits.data, 4)
plot_digits(noisy)

加噪音前画图: 

给数组中的每个数据加上噪音的方法

 加噪音后画图:

给数组中的每个数据加上噪音的方法

 

上一篇:Spring Cloud微服务


下一篇:TransferServlet类代码示例