如何用Python从两个数值列表X、Y中随机选取10个对应元素?
从对应列表中随机选取指定数量的元素对
我有两个数值列表X和Y,需要从每个列表里随机选10个对应位置的元素,生成各含10个元素的新列表。举个例子:如果X是[1,2,3,4,5]、Y是[10,20,30,40,50],选2个元素的话,期望结果是([1,3], [10,30])。
我的使用场景如下:
def lin_reg_all(X, Y): ... def lin_reg_sample(X, Y): X_sample, Y_sample = ? lin_reg_all(X_sample, Y_sample)
解决方案
无放回采样(每个元素最多选一次)
用random.sample生成不重复的随机索引,再提取对应元素:
import random def lin_reg_sample(X, Y): # 先校验两个列表长度一致 assert len(X) == len(Y), "X和Y的长度必须相同" # 生成10个不重复的索引 sample_indices = random.sample(range(len(X)), 10) # 提取对应元素 X_sample = [X[i] for i in sample_indices] Y_sample = [Y[i] for i in sample_indices] lin_reg_all(X_sample, Y_sample)
有放回采样(元素可重复选中)
如果允许同一个元素被多次采样,用random.choices:
import random def lin_reg_sample(X, Y): assert len(X) == len(Y), "X和Y的长度必须相同" # 生成10个可重复的索引 sample_indices = random.choices(range(len(X)), k=10) X_sample = [X[i] for i in sample_indices] Y_sample = [Y[i] for i in sample_indices] lin_reg_all(X_sample, Y_sample)
说明
random.sample适合需要避免重复元素的场景,要求原列表长度≥10(否则会报错)random.choices允许重复采样,原列表长度可以小于10
内容的提问来源于stack exchange,提问作者Joe C.
相关产品推荐
相关产品推荐

