下采样列表中的条目数(不进行插值)

Dav*_*ave 7 python list downsampling

我有一个包含许多条目的Python列表,我需要使用以下任一项进行缩减采样:

  • 最大行数.例如,将1234个条目的列表限制为1000.
  • 原始行的一部分.例如,使列表的原始长度为1/3.

(我需要能够做到两种方式,但一次只能使用一种方式).

我相信,对于最大行数,我可以计算所需的比例并将其传递给比例缩减器:

def downsample_to_max(self, rows, max_rows):
        return downsample_to_proportion(rows, max_rows / float(len(rows)))
Run Code Online (Sandbox Code Playgroud)

...所以我真的只需要一个下采样功能.有什么提示吗?

编辑:列表包含对象,而不是数值,所以我不需要插值.丢弃对象很好.

解:

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
Run Code Online (Sandbox Code Playgroud)

谢谢.

tza*_*man 6

您可以使用isliceitertools:

from itertools import islice

def downsample_to_proportion(rows, proportion=1):
    return list(islice(rows, 0, len(rows), int(1/proportion)))
Run Code Online (Sandbox Code Playgroud)

用法:

x = range(1,10)
print downsample_to_proportion(x, 0.3)
# [1, 4, 7]
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 1

保留一个计数器,并按第二个值递增。每次将其下限,并产生该指数的值。