python - 如何从两个范围内抽取二维随机均匀样本

标签 python numpy

我有两个变量的两对最小值和最大值。我想从这两个变量的均匀分布中抽取 n 个随机样本,位于它们的最小值和最大值之间。例如:

min_x = 0
max_x = 10
min_y = 0
max_y = 20

假设我画了三个样本。这些可能是:

[(4, 15), (8, 9), (0, 19)] # First value is drawn randomly with uniform probability between min_x and max_x, second value is drawn similarly between min_y and max_y

如何使用 numpy 以简单的方式实现这一点?

我想出了这个:

>>> min_x = 0
>>> max_x = 10
>>> min_y = 0
>>> max_y = 20
>>> sample = np.random.random_sample(2)
>>> sample[0] = (sample[0]) * max_x - min_x
>>> sample[1] = (sample[1]) * max_y - min_y
>>> sample
array([ 1.81221794, 18.0091034 ])

但我觉得应该有一个更简单的解决方案。

编辑:不是重复的。建议的重复问题的答案涉及整数。

最佳答案

numpy 中大多数随机生成函数的参数都在数组上运行。以下代码生成 10 个样本,其中第一列取自 (0, 10) 均匀分布,第二列取自 (0, 20)。

n = 10
xy_min = [0, 0]
xy_max = [10, 20]
data = np.random.uniform(low=xy_min, high=xy_max, size=(n,2))
print(data)

输出是

[[ 5.93168121,  7.36060232],
 [ 6.0681728 ,  8.83458336],
 [ 3.51412518,  7.86395892],
 [ 5.28704184, 11.2423749 ],
 [ 8.14407888,  6.30980757],
 [ 8.93337281, 13.39148231],
 [ 6.94694921, 19.50003171],
 [ 2.52280804, 13.21572422],
 [ 3.41855383,  2.56327567],
 [ 4.06155783,  3.95026796]]

关于python - 如何从两个范围内抽取二维随机均匀样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49754797/

相关文章:

python - Python-OpenCv检测产生奇怪结果的圆

python - 给定列的 Numpy 最小值

python - 如何获取元组列表并将元组从字符串更改为整数

python - 用python打开albumdata.xml并获取所有图片路径

python - 在 Python NumPy 中,维度和轴是什么?

python - 将 -inf 替换为零值

python - numpy 数组输入到 tensorflow/keras 神经网络的 dtype 有什么关系吗?

python - 从安装了新 ArcGIS 10.1 的 scipy- 新计算机导入统计信息时出错

python - 从此数据框创建多级列

numpy - 在 Numpy 和 Nibabel 中更改数据类型