高效生成具有依赖关系的两个随机样本的方法

问题描述

我想生成两组变量,h_minh_max

h_max = [h_max_1,h_max_2,…h_max_2000]
h_min = [h_min_1,h_min_2,… h_min_2000]

h_max 的每个元素都是基于均匀分布生成的,即,

h_max = np.random.uniform(0,20,2000). 

对于每一个元素,h_min_i,应该根据范围为0的均匀分布生成,对应的h_max_ih_min_i = np.random.uniform(0,h_max_i) 不使用迭代,如何高效生成h_min

解决方法

numpy.random.uniform 函数允许第一个和/或第二个参数是一个数组,而不仅仅是一个数字。它们完全按照您的预期工作:

h_max=np.random.uniform(0,20,2000)
h_min=np.random.uniform(0,h_max,2000)

但是,从 NumPy 1.17 开始,numpy.random.* 函数(例如 numpy.random.uniform)已成为遗留函数,并且出于向后兼容性的原因,预计它们的算法将保持原样。但是,该版本没有弃用任何 numpy.random.* 函数,因此它们暂时仍然可用。另见this question

在较新的应用程序中,您应该使用 1.17 版中引入的新系统,包括 numpy.random.Generator(如果您拥有该版本或更高版本)。新系统的优势之一是应用程序对全局状态的依赖较少。 Generator 也有一个 uniform 方法,其工作方式与遗留函数 numpy.random.uniform 的工作方式大致相同。以下示例使用 Generator 并适用于您的情况:

gen=np.random.default_rng() # Creates a default Generator
h_max=gen.uniform(0,2000)
h_min=gen.uniform(0,2000)