簡體   English   中英

從列表中的滑動窗口中選擇隨機項目

[英]select random items from a sliding window in a list

我有一個包含整數項的數組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_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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM