#python
#python
Вопрос:
У меня есть array_large
и array_small
. Мне нужно равномерно выполнить выборку, array_large
чтобы в итоге получился массив того же размера, array_small
что и . (Или, другими словами, мне нужна репрезентативная, уменьшенная версия array_large
для сопоставления array_small
.)
В качестве сверхтривиального примера, если array_small = [0, 1]
и array_large = [0, 1, 2, 3]
я бы ожидал sample = [0, 2]
или sample = [1, 3]
.
Ответ №1:
Давайте представим array_small
, что это 30 элементов и array_large
равно 100.
array_small = [i for i in range(30)]
array_large = [i for i in range(100)]
sample_rate = len(array_large) / len(array_small)
В этом случае наш sample_rate
3.333...
это означает, что нам нужен примерно каждый 3-й элемент, но иногда и каждый 4-й элемент. Поскольку это sample_rate
значение с плавающей точкой, мы можем учитывать это с math.floor()
помощью и использовать оператор mod для индекса массива:
import math
array_large_sample = [
num for i, num in enumerate(array_large)
if math.floor(i % sample_rate) == 0
]
print(array_large_sample)
print(len(array_large_sample))
OUTPUT:
[0, 4, 7, 11, 14, 17, 21, 24, 27, 31, 34, 37, 41, 44, 47, 51, 54, 57, 61, 64, 67, 71, 74, 77, 81, 84, 87, 91, 94, 97]
30