如何嵌套生成器

克里斯维尔德贝格

我正在研究生成器以使我的一些代码更有效率。目前想知道我可以/应该如何处理每个创建列表的嵌套 for 循环。嵌套循环为 for 循环的每一步重新生成一个值列表。这些值是 3 列馈送数据的向量归一化。从此列表中获取最大值并将其添加到函数返回的列表中。似乎可以通过使用生成器来提高效率。但是,我不确定如何处理嵌套的 for 循环,因为该函数将在第一次产生时停止。

目前的代码;

def define_max_values(data, indexes):

    max_values = []

    for iter in range(len(indexes)):
        data_index_window = data[index[iter] - 5:index[iter] + 50]
        for i in range(len(data_index_window)):
            sub_list = []   
            sub_list.append(np.linalg.norm(data_index_window.iloc[i, 0:3].values))

        max_values.append(max(sub_list))
    return max_values

我认为这可以变成这样,使用 1 个生成器

def define_max_values(data, indexes):
     for iter in range(len(indexes)):
            data_index_window = data[index[iter] - 5:index[iter] + 50]
            for i in range(len(data_index_window)):
                sub_list = []
                sub_list.append(np.linalg.norm(data_index_window.iloc[i, 0:3].values))

            yield(max(sub_list)

这似乎已经更具可读性/更高效的代码,但想知道我是否/如何用另一个产量替换内部 list.append 。

哈奇克

max 不需要序列,它也可以与生成器一起使用,例如:

def define_max_values(data, indexes):
    for iter in range(len(indexes)):
        data_index_window = data[index[iter] - 5:index[iter] + 50]
        yield max(np.linalg.norm(
                          data_index_window.iloc[i, 0:3].values) \
                  for i in range(len(data_index_window)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章