生成随机分布时强制转换为int-Python

生成随机分布时强制转换为int-Python,python,random,Python,Random,我在乱画随机分布图时发现,当我用int(random.random()*random.random())绘制分布图时,会出现模糊但清晰且间隔规则的线条。以下是我使用的代码: import random import matplotlib.pyplot as plt x = [] y = [] for i in range(50000): x.append(int(100*(random.random() + random.random()))) y.append(int(10

我在乱画随机分布图时发现,当我用int(random.random()*random.random())绘制分布图时,会出现模糊但清晰且间隔规则的线条。以下是我使用的代码:

import random
import matplotlib.pyplot as plt

x = []
y = []

for i in range(50000):
    x.append(int(100*(random.random() + random.random())))
    y.append(int(100*(random.random() + random.random())))

plt.figure(figsize = (12,12))
plt.scatter(x,y,s=3)
这是我得到的图表:

如果您取消整数转换,则整个事情看起来与预期的一样:

奇怪的是,似乎只有x轴负责垂直线,因为移除x轴上的铸件可以去除垂直线。y轴不显示任何微弱的水平线,但有几条较暗的线


显然,较暗的线条与转换为整数有关,但为什么以及如何以这种方式影响总体分布。此外,为什么它仅在垂直方向上,而不是在两个维度上对称应用

这很可能是与
matplotlib
在绘图过于“拥挤”时决定从绘图中删除哪些点有关的人为因素。例如,在我的屏幕上,我得到了一个具有紧密间隔线的绘图-请参阅,同时将绘图大小减小到
(10,10)
,结果是

此外,将点数减少到10000(在我的情况下=对于我的屏幕)会导致
大小=(12,12)
的无线绘图:


作为实验,让我们绘制一组均匀分布的点:

import numpy as np
import matplotlib.pyplot as plt
y, x = np.meshgrid(np.arange(100), np.arange(100))
plt.figure(figsize = (5,5))
plt.scatter(x.ravel(), y.ravel(), s=3)
plt.show()

这似乎有多种可能发生的方式。因为这些浮点是二进制的,所以您可能已经找到了一种二进制到十进制的边缘情况。或者它可能是PRNG算法中的一个缺陷。您可能希望尝试使用SystemRandom进行比较。您也可以使用random.choice(范围(100))生成整数谢谢,我尝试了SystemRandom,得到了相同的结果。我同意你的看法,这可能是某种边缘案件。我只是想知道是否有人对这个特殊的边缘案例有所了解,以满足我的好奇心。绝对有比这更好的方法来生成整数的随机分布。是的,我认为这是正确的。当我绘制等距点集时,我得到了不同的线集合。谢谢你的回答。我想它会有一个比这个更有趣的解释,哈哈。也就是说,有趣的是,它只在强制转换为整数时发生,而不是在浮点版本中发生