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