获取列表的子样本的索引



我在python中有几个数据列表:

a = [2,45,1,3]
b = [4,6,3,6,7,1,37,48,19]
c = [45,122]
total = [a,b,c]

我想从中获得n随机索引:

n = 7
# some code
result = [[1,3], [2,6,8], [0,1]] # or
result = [[0], [0,2,6,8], [0,1]] # or
result = [[0,1], [0,2,3,6,8], []] # or any other

这个想法——它从任何数组中随机获取任何元素(这些元素的索引(,但它们的总数必须是n

所以我的想法-生成随机索引:

n = 7
total_len = sum([len(el) for el in total])
inds = random.sample(range(total_length), n))

但是怎样才能得到这样的指数呢?我考虑过np.cumsum()和之后的移位独立,但找不到优雅的解决方案。。。


p.S。实际上,我需要使用它来使用skiprow选项从几个csv文件加载数据。因此,我的想法是为每个文件获取索引,这样我就可以从每个文件中只加载必要的行。所以我真正的任务是:我有几个不同长度的csv文件,需要从中获得n随机行。我的想法:

lengths = my_func_to_get_lengths_for_every_csv(paths) # list of lengths
# generate random subsamle of indexes
skip = ...
for ind, fil in enumerate(files):
pd.read_csv(fil, skiprows=skip[ind])

您可以先将列表压平,然后进行采样:

total_flat = [item for sublist in total for item in sublist]
inds = random.sample(total_flat , k=n)

这就是你的意思吗?

relative_inds = []
min_bound = 0
for lst in total:
relative_inds.append([i - min_bound for i in inds if min_bound <= i < min_bound + len(lst)])
min_bound += len(lst)

最新更新