如何解决从多个列表中随机采样
我当前有一些数据存储在3个列表中,我们将它们称为a
,b
和c
。列表全部包含n
元素。我想从我的数据中随机抽取一个样本,例如sample_n
的大小,以创建一些较小的数据集来处理,但我想从每个列表中抽取相同的随机样本。也就是说,我想从每个列表中随机选择相同的元素。因此,如果我随机选择元素i
,则希望从每个列表(i
,a[i]
和b[i]
)中选择元素c[i]
。我不想生成3组随机数,以使三个列表的元素不匹配。例如,我不希望分别为每个集合运行this random sampling。
我认为我需要做的就是生成一个单独的随机数列表random_list
,该列表的长度为sample_n
,然后执行类似的操作
for element in range(len(random_list)):
sample_a[element] = a[random_list[element]]
sample_b[element] = b[random_list[element]]
sample_c[element] = c[random_list[element]]
但是,我不知道如何生成随机数列表!我也想知道是否有比我在这里想的更有效的方法。
解决方法
对不起,以前搜索过但没有发现任何东西,我现在才立即发现:
Random sample of paired lists in Python
,您可以对索引进行混洗。第一种方式:
import numpy as np
indices = list(range(20))
np.random.shuffle(indices)
indices
[9,13,19,17,10,14,5,7,18,8,3,16,4,15,11,12,6,1,2]
第二种方式:
import random
indices = list(range(20))
random.shuffle(indices)
indices
[5,2,9,15]
或者,如果索引可以重复:
np.random.randint(1,size=20)
array([1,3])
效率。在二维数组中存储sample_a
,sample_b
,sample_c
更快:
X = np.array([['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'],['m','n','o'],['p','q','r'],['s','t','u']])
idx = np.random.randint(0,len(X),size=7)
,然后使用X[idx,0]
,X[idx,1]
,X[idx,2]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。