1、问题提出
- 在对算法进行实现的过程中往往会遇到特征矩阵的构建
- 但矩阵的构建往往会导致内存占用过大,甚至内存溢出
2、问题解决
- 尝试多种特征矩阵构建的方式,计算每种方式所占的内存
- 实例验证生成器对象与列表生成式对象所占的内存:
# 创建生成器方法一:将列表生成式的[]换位()
L = [x**2 for x in range(5)]
G = (x**2 for x in range(5)) # 因为生成器是可迭代对象,因此可以采用for循环对其进行迭代
# 创建生成器方法二:yield
def fib(times):
a, b = 0, 1
n = 0
while n <= times:
yield b # 注意yield将变量b的一系列值作为生成器。
# b = a + b
# a = b
b, a = a + b, b
n += 1
return "done"
for i in fib(5):
print(i)
测试:
import sys
print(sys.getsizeof(G))
print(sys.getsizeof(L))
import numpy as np
nparray = np.array(L)
print(nparray)
print(sys.getsizeof(nparray))
结果:
88
128
[ 0 1 4 9 16]
116
实验结果表明生成器对象所占的内存要比列表生成式要小许多。