Как я могу равномерно выполнить выборку массива в Python по порядку в соответствии с частотой дискретизации?

#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