从图中生成数据集

时间:2017-01-21 10:07:03

标签: python matplotlib machine-learning dataset

你好我遇到了一个问题,我需要从散点图上给出的分布中生成数据集,其中数据点主要以圆心为中心,并且也围绕圆的特定半径。生成这样的任何想法python中的数据集?

2 个答案:

答案 0 :(得分:1)

在圆形上产生分布的一种方法是对一维分布进行采样,然后将其拉伸到圆的2 Pi圆周上。

然后可以决定使用统一分布或正态分布。

import matplotlib.pyplot as plt
import numpy as np

def dist(R=4., width=1., num=1000, uniform=True):
    if uniform:
        r = np.random.rand(num)*width+R
    else:
        r = np.random.normal(R, width, num)
    phi = np.linspace(0,2.*np.pi, len(r))
    x= r * np.sin(phi)
    y = r* np.cos(phi)
    return x,y

fig, ax = plt.subplots(ncols=2, figsize=(9,4))

ax[0].set_title("uniform")
x,y = dist()
ax[0].plot(x,y, linestyle="", marker="o", markersize="2")
x,y = dist(0,1.2, 400)
ax[0].plot(x,y, linestyle="", marker="o", markersize="2")

ax[1].set_title("normal")
x,y = dist(4,0.4, uniform=False)
ax[1].plot(x,y, linestyle="", marker="o", markersize="2")
x,y = dist(0,0.6, uniform=False)
ax[1].plot(x,y, linestyle="", marker="o", markersize="2")

for a in ax:
    a.set_aspect("equal")
plt.show()

enter image description here

答案 1 :(得分:0)

您可以使用以点为中心的一些分布来轻松推广随机数,例如,以0,0为中心的正态分布。

x = np.random.normal(size=1000)
y = np.random.normal(size=1000)

plt.plot(x, y, 'o', alpha=0.6)

data example plot

修改

我们所做的是在极坐标中生成随机点。首先我们对角度做一个随机的(在0和2 pi之间),然后我们给出噪声乘以一些随机数。

n = 300
theta_out = np.random.uniform(low=0, high=2*np.pi, size=n)

noise_out = np.random.uniform(low=0.9, high=1.1, size=n)

x_out = np.cos(theta_out) * noise_out
y_out = np.sin(theta_out) * noise_out

theta_in = np.random.uniform(low=0, high=2*np.pi, size=n)

noise_in = np.random.uniform(low=0, high=0.5, size=n)

x_in = np.cos(theta_in) * noise_in
y_in = np.sin(theta_in) * noise_in

ax = plt.gca()
ax.set_aspect('equal')    

plt.plot(x_out, y_out, 'o')
plt.plot(x_in, y_in, 'o')

final example

请注意,半径越低,点密度越大。