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

时间:2018-09-26 03:26:51

标签: 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(100*(random.random() + random.random())))

plt.figure(figsize = (12,12))
plt.scatter(x,y,s=3)

这是我得到的图:

Scatter-plot of distribution with distinct faint lines

如果您将整数转换为整数,则整个过程将按预期进行:

Scatter-plot of distribution without integer casting

奇怪的是,似乎只有x轴才是垂直线,因为删除x轴上的投射会去除这些线。 y轴没有显示任何模糊的水平线,但是有一些较暗的线。

Scatter-plot with integer casting removed on the x-axis only

显然,较弱的线条与强制转换为整数有关,但是为什么以及如何影响这种方式的整体分布。另外,为什么只在垂直方向上而不在两个方向上对称地施加?

1 个答案:

答案 0 :(得分:1)

很可能与工件有关,matplotlib如何确定在绘图过于“拥挤”时从绘图中掉落的点。例如,在我的屏幕上,我得到了一条带有紧密间隔的线条的绘图-参见plot with size=(12,12),同时将绘图大小减小到(10, 10)会得到this image

另外,将点数减少到10000(在我的情况下=对于我的屏幕)会导致size=(12,12)Plot with size=(12,12) and 10000 points

的无行绘图

作为实验,让我们绘制一组均匀间隔的点集:

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()

Here is the result for the uniformly spaced points