У меня есть список Python со многими записями, которые я должен субдискретизировать использование также:
(Я должен смочь сделать оба пути, но только один используется за один раз).
Я полагаю, что для максимального количества строк могу просто вычислить необходимую пропорцию и передача что к пропорциональному downsizer:
def downsample_to_max(self, rows, max_rows):
return downsample_to_proportion(rows, max_rows / float(len(rows)))
... таким образом, мне действительно только нужна одна функция субдискретизации. Какие-либо подсказки?
Править: Список содержит объекты, не числовые значения, таким образом, я не должен интерполировать. Отбрасывание объектов прекрасно.
РЕШЕНИЕ:
def downsample_to_proportion(self, rows, proportion):
counter = 0.0
last_counter = None
results = []
for row in rows:
counter += proportion
if int(counter) != last_counter:
results.append(row)
last_counter = int(counter)
return results
Спасибо.
Сохраняйте счетчик, который вы увеличиваете на второе значение. Каждый раз выравнивайте его и получайте значение по этому индексу.
Вы можете использовать islice
из itertools
:
from itertools import islice
def downsample_to_proportion(rows, proportion=1):
return list(islice(rows, 0, len(rows), int(1/proportion)))
Использование:
x = range(1,10)
print downsample_to_proportion(x, 0.3)
# [1, 4, 7]