所以我们知道randn会产生高斯噪声,让我们看看它是如何工作的。

>> some_number = randn();
>> disp(some_number);

运行后,我们得到0.76388。

再次运行它。我们得到另一个数字1.3958。

您可以将尺寸传递给randn以生成填充有随机数的矢量或矩阵。

假设我们想要一个五列1行向量。([1 5])

>> some_numbers = randn([1 5]);
>> disp(some_numbers);

运行后,我们得到:

python实现高斯噪声代码 生成高斯噪声_python实现高斯噪声代码

 

 每次我们运行它,我们得到不同的数字集。

 正如您可能已经猜到的那样,我们也可以生成随机数的二维矩阵。

 假设我们想要两行三列。([2 3]),由于这些是一堆随机数,我们称之为噪音。

>> some_number = randn([2 3]);
>> disp(some_number);

有趣的是,randn从高斯或随机正态分布中提取这些数字。因此,randn.A高斯分布中的n具有看起来像这样的概率分布函数。

randn的中心或平均值为零,标准差为1标准偏差是度量分布如何扩展的度量。

我提到这是一个概率分布,这意味着很可能找回接近零的数字,而远离零的数字则不太可能。

我们怎么知道randn实际上是从高斯分布中采样的呢?

好,如果我们有足够的样本并将它们分配到箱子中,并且我们计算了每个箱子中落入的数量,

那么我们将看到类似于概率分布函数的模式。

我们试试吧。

我们从一百个数字的向量开始怎么样?([1 100])

>> noise = randn([1 100]);
>> disp(noise);

我们不是直接显示数字,而是计算直方图。

>> noise = randn([1 100]);
>> [n, x] = hist(noise, [-3 -2 -1 0 1 2 3]);
>> disp([x; n]);

Hist函数:接受数字的向量或矩阵作为第一个参数,作为可选的第二个参数,您可以传入bin center。

假设我们希望中心是整数,从负3到正3。

Hist返回两个值:一个是我们想要的元素的数量,第二个是bin中心。

让我们以表格形式显示bin中心和列。

我们将创建一个小的临时矩阵,第一行是bin中心,第二行是统计数:

python实现高斯噪声代码 生成高斯噪声_正态分布_02

正如预期的那样,该中心的数量很高,而且两端的数量很少,实际上是零。

无论您运行多少次,都会看到相同的行为。

python实现高斯噪声代码 生成高斯噪声_随机数_03

为了直观地表示正在发生的事情,我们如何绘制这些数字?

>> noise = randn([1 100]);
>> [n, x] = hist(noise, [-3 -2 -1 0 1 2 3]);
>> disp([x; n]);
>> plot(x, n)

我们使用plot函数:x轴将包含bin中心,计数将在y轴上。

运行代码,我们得到:

python实现高斯噪声代码 生成高斯噪声_随机数_04

我们看到的东西类似于高斯概率分布。

为了得到更好的图像,我们需要更多的数字。

您可以使用linspace函数生成一系列均匀间隔的数字。

>> noise = randn([1 100]);
>> [n, x] = hist(noise, linspace(-3,3,7));
>> disp([x, n]);
>> plot(x, n);

在linspace函数,我们可以通过写-3到3,7不同的数字来替换这个向量,这包括零。

(技术点:linspace函数解析。例如:X=linspace(5,100,20) 为 产生从5到100范围内的20个数据,相邻数据跨度相同,

X = 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100。正如我们上面的代码:linspace(-3,3,7),所以

X = -3 -2 -1 0 3 2 1。)

让我们确保这和以前一样。

python实现高斯噪声代码 生成高斯噪声_python实现高斯噪声代码_05

请注意,bin中心与预期相同。

现在我们可以轻松增加事件的数量。

>> noise = randn([1 100]);
>> [n, x] = hist(noise, linspace(-3,3,21));
>> disp([x; n]);
>> plot(x, n);

比如说,我们想要21个。

我选择奇数,因为我想把0包含在中间。

显示这么多的数字是没有用的,所以让我们注释一下,看看图是什么样子。

python实现高斯噪声代码 生成高斯噪声_正态分布_06

显然,我们沿着X轴有更好的分辨率,但是这些尖端是怎么回事?

我认为我们需要更多数据,让我们将矢量提升到1,000个数字。([1 1000])

python实现高斯噪声代码 生成高斯噪声_随机数_07

现在你看到熟悉的钟形曲线慢慢浮现。

让我们进一步增加样本数量。

python实现高斯噪声代码 生成高斯噪声_随机数_08

越来越明显。

除了randn之外,您还可以在Octave或MATLAB中找到其他随机数生成函数。例如:

Rand:它从均匀分布中抽样出来的;

Randi:生成随机整数。

可以随意玩这些功能。


——学会编写自己的代码,才能练出真功夫。