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
實驗結果表明生成器對象所佔的內存要比列表生成式要小許多。