如何实现重复抽样结果固定的NumPy数组行选取?
固定随机抽样结果的最简实现方法
我有一个numpy数组,希望从中选取若干行,要求重复执行抽样操作时,选取的行保持不变。但当前代码每次运行都会得到不同的抽样结果:
import numpy as np # 示例数组 points = np.array([[ 4.926, 46.153], [ 5.428, 46.009], [ 5.373, 45.961], ..., [ 2.404, 49.008], [ 2.387, 49.074], [ 1.825, 49.096]], shape=(34806, 2)) # 当前抽样代码(每次结果不同) sel = np.random.choice(points.shape[0], size=6, replace=False) points_sampled = points[sel]
最简解决方法
核心是固定随机数生成器的种子,让随机抽样的结果可复现,有两种常用方式:
方式一:设置全局随机种子
在抽样代码前调用np.random.seed()传入固定数值(数值可任意指定),之后所有np.random相关操作都会基于这个种子生成固定序列:
np.random.seed(42) # 固定种子 sel = np.random.choice(points.shape[0], size=6, replace=False) points_sampled = points[sel]
每次运行这段代码,sel的索引都会完全一致,因此points_sampled结果固定。
方式二:使用独立随机生成器(推荐)
如果不想影响全局随机状态,可以创建一个独立的RandomState实例,用它执行抽样:
rng = np.random.RandomState(42) # 基于固定种子创建生成器 sel = rng.choice(points.shape[0], size=6, replace=False) points_sampled = points[sel]
这种方式不会干扰其他地方的随机操作,更适合复杂项目场景。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

