如何在年龄与时间上创建np数组随机数据?

时间:2018-05-07 11:59:56

标签: python pandas numpy matplotlib

如何在年龄与时间上创建np数组随机数据?

我的目标是创建一个散点图,表示年龄与看电视时间的随机数据。

from pylab import randn

X = randn(500)
Y = randn(500)
plt.scatter(X,Y)
plt.show()

我希望年龄在18到50之间,时间在0到24小时之间

3 个答案:

答案 0 :(得分:1)

numpy非常容易。您可以使用numpy库来执行此操作:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

age = np.random.randint(18, 50, 20)
time = np.random.randint(0, 24, 20)

plt.scatter(age, time)
plt.show()

enter image description here

答案 1 :(得分:1)

您可以尝试:

import random
import numpy as np
age=np.array(random.sample(list(range(18,51)),10))
time=np.array(random.sample(list(range(0,24)),10))

random.sample将元素列表作为第一个参数,将所需的样本数作为第二个参数。

这给出了:

age  : [47 45 37 19 23 34 39 24 32 42]
time : [18 12 13  1 15 21 23 22  3 17]

在绘图时:

import matplotlib.pyplot as plt
plt.scatter(age, time)
plt.show()

enter image description here

要在每次运行时重新创建相同的随机数,您可以使用random.seed()

答案 2 :(得分:1)

numpy中的逐列乘法

您可以使用numpy轻松创建自定义大小的随机数组,命令numpy.random.rand(d0, d1, …, dn)用于均匀分布,numpy.random.randn(d0, d1, …, dn)用于正态分布,其中dn是第n维中的样本数。在您的情况下,您将拥有d0=500d1=2

但是,值将从numpy.random.rand(d0, d1, …, dn)中的区间[0,1]进行采样。或numpy.random.randn(d0, d1, …, dn)的标准正态分布(即均值= 0和方差= 1)。

这是一个很好的转变,即按列顺序求和并乘以数组,以便将分布转换为所需的值。要以列式方式将数组arr与向量vec相乘,您可以使用此小代码段arr.dot(np.diag(vec))。请注意,vec应该包含与arr一样多的元素列。

此代码段的工作原理是将vec转换为对角矩阵(即除主对角线以外的所有内容均为零的矩阵)以及将arr乘以对角矩阵。

对于均匀分布

请记住,要将样本x从统一分布[0, 1)转换为[min, max),您需要new_x = (max - min) * x + min。因此,如果您想要均匀分布并且您知道两个变量的最大和最小限制,则可以使用以下代码:

import numpy as np

n_samples = 500
max_age, min_age = 80, 10
max_hours, min_hours = 10, 0

array = np.random.rand(n_samples, 2)  #returns samples from the uniform distribution
range_vector = np.array([max_age - min_age, max_hours - min_hours])
min_vector = np.array([min_age, min_hours])

sample = array.dot(np.diag(range_vector)) + np.ones(array.shape).dot(np.diag(min_vector))

正态分布

如果您想要正态分布,并且您知道两列的均值和方差,请使用以下代码。请记住,要将样本x从标准正态分布转移到具有不同均值和标准差的分布,请转到new_x = deviation * x + mean

import numpy as np

n_samples = 500
mean_age, deviation_age = 40, 20
mean_hours, deviation_hours = 5, 2

array = np.random.rand(n_samples, 2)  #returns samples from the standard normal distribution
deviation_vector = np.array([deviation_age, deviation_hours])
mean_vector = np.array([mean_age, mean_hours])

sample = array.dot(np.diag(deviation_vector)) + np.ones(array.shape).dot(np.diag(mean_vector))

但要注意,使用正态分布时,最终可能会出现负值。

您还可以查看numpy对随机变量的所有文档:https://docs.scipy.org/doc/numpy/reference/routines.random.html

最后请注意,只有当您希望两个样本都是独立的时,逐列乘法才有效。