是否有一种 Pythonic 方法可以从列表或 numpy 数组中采样 N 个连续元素

phn*_*ntm 9 python numpy sample

是否有一种 Pythonic 方法可以从列表或 numpy 数组中选择 N 个连续元素。

所以假设:

Choice = [1,2,3,4,5,6] 
Run Code Online (Sandbox Code Playgroud)

我想通过在选择中随机选择元素 X 以及选择后的 N-1 个连续元素来创建一个长度为 N 的新列表。

因此,如果:

X = 4 
N = 4
Run Code Online (Sandbox Code Playgroud)

结果列表将是:

Selection = [5,6,1,2] 
Run Code Online (Sandbox Code Playgroud)

我认为类似于以下内容的内容会起作用。

S = [] 
for i in range(X,X+N):
    S.append(Selection[i%6])    
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个 python 或 numpy 函数可以一次选择更有效的元素。

che*_*ner 10

使用itertools,特别是islicecycle

start = random.randint(0, len(Choice) - 1)
list(islice(cycle(Choice), start, start + n))
Run Code Online (Sandbox Code Playgroud)

cycle(Choice)是一个无限序列,重复您的原始列表,以便切片start:start + n在必要时换行。

  • @phntm:对于大输入,它几乎可以保证比任何其他解决方案都慢,因为它在内存使用和处理时间上都是“O(n)”(“islice”不能跳过值,“cycle”将它们全部存储起来,直到输入已耗尽)。对于小输入,使用什么解决方案并不重要。 (2认同)