试图绘制一个随机函数,但它似乎不是很随机

Trying to plot a random function but it seems that it's not quite random

我正在尝试绘制教科书中的随机函数,如下所示:

我所做的是为一个范围内的所有数字生成一个介于 1 到 20 之间的随机数。

import numpy as np
import random
import matplotlib.pyplot as plt
X = np.arange(1,20,0.2).tolist()
Random = [random.random() for x in X]
fig, axs = plt.subplots(1, 1)
axs.plot(X, Random,linestyle = 'dotted', color='r')

然后我绘制了这个但是我得到了这个:

现在我想知道这不是很随机,我们可以看到在某些范围内函数在增加或减少,看起来这些值并不是完全独立的。 我的问题是如何写一个像第一张图一样完全随机的函数。

我能够用相同的代码做得很好。 为什么不再试一次 运行 呢? 我认为你必须使用 scattar 。

X = np.arange(1,20,0.2).tolist()
Random = [random.random() for x in X]
plt.scatter(X,Random)

在你的第一个图中,水平轴和垂直轴是相同的,你说你想重现那个,这让我相信它是在绘制成对的随机数。 (实际上看起来它们是 U(-6,6) 值。)这就是以下代码的作用:

import random
import matplotlib.pyplot as plt

randnums = [random.random() for _ in range(101)]
plt.scatter(randnums[0:100], randnums[1:101])
plt.show()

结果将与 运行 运行 不同,但看起来像这样:

此图表明相邻值在单位正方形的所有四个象限中均等平衡,这很好地表明它们不相关,但远不及进行严格测试。

值得一提的是,人类对随机性的判断是出了名的差。这就是为什么大多数语言库中使用的 PRNG 都经过大量统计测试的彻底审查。有关 Diehard tests or the TestU01 suite. Python's random uses Mersenne Twister 的详细信息,请参阅维基百科,它已经过这些测试并被认为足以用于统计(但不是密码)使用。换句话说,你不需要做测试,它已经完成了。