我有一个包含整数项的数组my_array
。我想循环my_array
x 次(例如 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_split
与numpy.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]