从列表中的滑动窗口中选择随机项目



我有一个包含整数项的数组my_array。我想循环my_arrayx 次(例如 x = 5),所以my_array应该切成x块。

在第一次迭代中,我想从第一个my_array块中采样 10% 的随机项,在第二次迭代中,我想从第二个my_array块中采样 10% 的随机项,依此类推。

我试过了

import random
percentage = 0.1
my_array = [3,6,9,8,7,1,2,4,5,19,10,11,12,13,14,15,16,17,18,20]
random.sample(range(len(my_array)), int(max(1,percentage * len(my_array))))

我可以从整个my_array中随机选择10%的项目。如何制作块并从相关块中选择项目?即使对于可变长度的my_array,我也想有效地做到这一点.

您可以使用numpy有效地执行此操作。

如果区块需要具有与my_array(滚动窗口)相同的顺序的数据:

使用numpy.array_split创建区块。然后使用列表推导,从每个块中随机选择10%的项目:

import numpy as np
chunks = np.array_split(my_array, 5)
selected_items = [random.sample(list(chunk), int(max(1, percentage * len(chunk)))) for chunk in chunks]
输出:
>>> selected_items
[[6], [1], [11], [13], [20]]

如果块需要从my_array中随机获得数据:

numpy.array_splitnumpy.random.permutation一起使用:

import numpy as np
chunks = np.array_split(np.random.permutation(my_array), 5)
selected_items = [random.sample(list(chunk), int(max(1, percentage * len(chunk)))) for chunk in chunks]
输出:
>>> selected_items
[[9], [12], [20], [4], [19]]


要获取每次迭代中选定项的列表,请计算块,遍历它们并从每个块中选取 10% 的项目:

import numpy as np
chunks = np.array_split(my_array, 5)
for i, chunk in enumerate(chunks):
selected_items = random.sample(list(chunk), int(max(1, percentage * len(chunk))))
print ("iteration ", i+1, ": ", selected_items)
# do stuff with selected_items
输出:
iteration  1 :  [3]
iteration  2 :  [1]
iteration  3 :  [10]
iteration  4 :  [15]
iteration  5 :  [17]

最新更新