簡體   English   中英

Python sum over iterator 以避免內存問題

[英]Python sum over iterator to avoid memory issues

假設我有幾個這樣的列表:

num = 100
configs = np.random.randint(0, 5, size=(num, 8))
probs = np.random.rand(num)

現在,我使用 qutip 使用from qutip import tensor, basis base 做一個熱編碼和張量產品。 這里basis(N,i)在 N 類的單熱編碼中對整數i<N進行編碼,即basis(3, 0) = [1, 0, 0]basis(4,2) = [0, 0, 1, 0] 現在,張量執行 Kronecker 產品,就像np.kron一樣,但可以接收多個參數並在參數列表上迭代執行np.kron 現在我執行以下操作:

states = [tensor(*[basis(5, i) for i in config]) for config in configs]

這可能會占用大量內存,因此更好的選擇是將其定義為生成器。 現在,我需要計算這個總和:

sum([p*state for p, state in zip(probs, states)])

我想在不消耗內存的情況下完成這個總和,即 zip 一次應該只消耗一個 probs 元素和一個 state 元素。 然后,應一次對一對元素進行求和,以保持較低的內存使用率。 我想盡快做到這一點,並盡可能少地消耗內存。 num可千萬量級。

由於 sum 和 zip 接收生成器,只需將方括號更改為常規括號即可定義生成器而不是列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM