【问题标题】:Batch Chop issue with generator iterator生成器迭代器的 Batch Chop 问题
【发布时间】:2020-11-23 07:41:21
【问题描述】:

我在 coursena 中进行测试,发现循环生成器的问题:

def batch_generator(items, batch_size):
    
    for i in range(0, len(list(items)), batch_size):
        yield list[i:i+batch_size]

# Test batch generator
def _test_items_generator():
    for i in range(10):
        yield i
        
print(i)
grader.set_answer("a4FK1", list(map(lambda x: len(x), batch_generator(_test_items_generator(), 3))))

错误如下:

TypeError                                 Traceback (most recent call last)
<ipython-input-85-a91baa3cf6fa> in <module>()
      6 
      7 print(i)
----> 8 grader.set_answer("a4FK1", list(map(lambda x: len(x), batch_generator(_test_items_generator(), 3))))

<ipython-input-84-4e82a37b7646> in batch_generator(items, batch_size)
     12     """
     13     for i in range(0, len(list(items)), batch_size):
---> 14         yield list[i:i+batch_size]
     15 
     16     ### YOUR CODE HERE

TypeError: 'type' object is not subscriptable

我不知道我应该在哪里解决我的问题。

【问题讨论】:

    标签: python arrays loops machine-learning batch-processing


    【解决方案1】:

    您正在尝试为内置的 list 对象下标。您需要将您的输入 (items) 转换为一个列表和下标:

    def batch_generator(items, batch_size):
        l = list(items)
        for i in range(0, len(l), batch_size):
            yield l[i:i+batch_size]
    

    如果您不想转换为列表(例如,当 items 本身是一个生成器时),您也可以遍历 items 输入:

    def batch_generator(items, batch_size):
        res = []
        for item in items:
            res.append(item)
            if len(res) == batch_size:
                yield(res)
                res = []
        if len(res) > 0:
            yield(res)
    

    请注意,我们需要在循环结束时检查res 中是否有任何剩余数据,如果有,也将其生成。

    【讨论】:

    • 非常感谢。这意味着 list(items) 不应该在循环中??
    • @PhạmTâm 没关系。
    • @PhạmTâm 因为你已经将list(items)分配给l,所以你不需要再次使用它,你可以使用l
    • 对不起,如果它打扰你,但我一直在尝试定义生成批量循环:项目中的项目:.....怎么可能???我真的很讨厌我必须使用其他方式来定义我上面发布的函数?
    • @PhạmTâm 你的意思是这样的:rextester.com/VLUZ11201 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2014-03-23
    • 1970-01-01
    • 2018-05-24
    • 2018-11-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多