1.运用生成器 Generators
当数据集尺寸为 200x200x3,共有 120000 个像素值,存储10,000 个图像大约要 1.2GB。如果加上一些预处理,比如将数据类型从 int 转化为 float,这可以将数据的大小增加到 4 倍。
生成器 Generators 在处理数据集时,不需要一次性将数据都存储在内存中,而是批量提取数据片段,仅仅在需要时才动态处理数据,这提高了内存使用效率。其中,生成器类似于协同程序,生成器进程可以独立于主程序运行。
2. Python 实现生成器
生成器使用 yield 而不是 return,它仍然返回所需的输出值,但是保存了生成器所有变量的当前值。当第二次调用生成器时,它会在 yield 语句之后重新启动,所有变量都设置为与前面相同的值。
下面是一个使用生成器的小测试。每次调用这个生成器时,它都会在列表中添加一个新的斐波那契数列。要传递,只需修改生成器的 yield,使它返回一个列表而不是 1。结果是,我们可以通过调用生成器 10 次来获得前 10 个斐波那契数列。如果我们需要做一些其他的事情除了生成斐波那契数列我们可以这样做,然后总是调用生成器当我们需要更多的斐波那契数列。
def fibonacci():
numbers_list = []
while 1:
if(len(numbers_list) < 2):
numbers_list.append(1)
else:
numbers_list.append(numbers_list[-1] + numbers_list[-2])
# yield 1 # change this line so it yields its list instead of 1
yield numbers_list
our_generator = fibonacci()
my_output = []
for i in range(10):
my_output = (next(our_generator))
print(my_output)
网友评论