问题描述
我想生成两组变量,h_min
和 h_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_i
即h_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)