Вы можете использовать функцию numpy repeat()
для повторения значений в values
указанное количество раз (в процентах * от общего числа):
import numpy as np
values = [0, 1, 2]
percentage = [0.5, 0.30, 0.20]
total = 11
repeats = np.around(np.array(percentage) * total).astype(np.int8) # [6, 3, 2]
np.repeat(values, repeats)
Вывод:
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2])
Я использовал функцию np.around()
для округления повторов, если они не являются целыми числами (например, если общее число равно 11, то 11*0.5 -> 6
, 11*0.3 -> 3
и 11*0.2 -> 2
).