如何在年龄与时间上创建np数组随机数据?
我的目标是创建一个散点图,表示年龄与看电视时间的随机数据。
from pylab import randn
X = randn(500)
Y = randn(500)
plt.scatter(X,Y)
plt.show()
我希望年龄在18到50之间,时间在0到24小时之间
答案 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()
答案 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()
要在每次运行时重新创建相同的随机数,您可以使用random.seed()
答案 2 :(得分:1)
您可以使用numpy轻松创建自定义大小的随机数组,命令numpy.random.rand(d0, d1, …, dn)
用于均匀分布,numpy.random.randn(d0, d1, …, dn)
用于正态分布,其中dn
是第n维中的样本数。在您的情况下,您将拥有d0=500
和d1=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
最后请注意,只有当您希望两个样本都是独立的时,逐列乘法才有效。