【问题标题】:python generator expressions for two data sets两个数据集的python生成器表达式
【发布时间】:2015-04-13 13:33:07
【问题描述】:
#Find values that are in range
in_range = [lo_lim <= v <= hi_lim for v in values]
#Find runs of in-range values
runs = [sum(1 for _ in group) for v, group in groupby(in_range) if v]

#Estimate total time spent in-range
total_time = sum(v if v > 1 else (Buffer_Value*sample_rate) for v in runs)

我正在尝试扩充此代码以获取两组值和 2 对高/低限制, 计算在这些限制内花费的总时间,当案例“限制内”对于同一点为真时的组合限制,即

如果有100个数据点(两个数据集长度相同,检查每个点,

if values_1[45] and values_2[45] are in their respective limits

然后算在范围内。 基本上把这个 if 变成了一个生成器表达式:

if lo_lim_1<=Data_Points_1[i]<=hi_lim_1 and lo_lim_2<=Data_Points_2[i]<=hi_lim_2:

计算运行次数,如果运行长度是一个数据点,则应用缓冲区,否则应用采样率转换。

【问题讨论】:

  • sum(1 for _ in group) 不只是len(group)
  • @user1016274 将 (1) 替换为 (2) 会破坏我的代码,所以不会。
  • @user1016274 如果group 是一个迭代器,则不是,就像groupby 一样。迭代器没有长度。
  • @TheBlackCat 谢谢你的扩展和解释,我不知道为什么:)
  • 既然你有了答案,你可能希望删除Calculating time within limits for multiple data sets,因为它本质上是这个问题的重复。 PS:你现在有足够的代表投票! :)

标签: python list signal-processing generator


【解决方案1】:

如果我理解您的问题,这应该可以。基本思想是你 zip 将两个序列组合成对应值对,然后使用 and 操作查找它们都在对应范围内的情况:

#Find values that are in range
in_range = [lo_lim1 <= v1 <= hi_lim1 and lo_lim2 <= v2 <= hi_lim2 for v1, v2 in zip(values1, values2)]

# code is unchanged from here
#Find runs of in-range values
runs = [sum(1 for _ in group) for v, group in groupby(in_range) if v]  # this is the same as yours

#Estimate total time spent in-range
total_time = sum(v if v > 1 else (Buffer_Value*sample_rate) for v in runs)

在您的情况下,如果您使用的是 python 2.x,则可以使用 itertools.izip 而不是 zip 来节省一些内存,对于 python 2.x 和 3.x,您可以使用生成器表达式来保存更多:

#Find values that are in range
in_range = (lo_lim1 <= v1 <= hi_lim1 and lo_lim2 <= v2 <= hi_lim2 for v1, v2 in zip(values1, values2))

#Find runs of in-range values
runs = (sum(1 for _ in group) for v, group in groupby(in_range) if v)  # this is the same as yours

#Estimate total time spent in-range
defval = Buffer_Value*sample_rate
total_time = sum(v if v > 1 else defval for v in runs)

【讨论】:

  • 效果很好,谢谢,你能给我一些关于这些类型问题的好教程吗?
  • 不,抱歉。这只是处理列表推导、内置函数和迭代工具的问题。
  • 干得好,黑猫。 FWIW,这是 my answer 约书亚最初的问题。
猜你喜欢
  • 2017-12-08
  • 2021-07-20
  • 2014-04-02
  • 2021-12-27
  • 2014-10-04
  • 2021-10-17
  • 2021-04-26
  • 2012-08-20
相关资源
最近更新 更多