亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

10億次排列后itertools飽和

10億次排列后itertools飽和

哆啦的時光機 2023-05-23 15:52:28
我編寫了以下代碼來計算列表列表的所有排列之間獲得的總和的平均值:import numpy as npimport itertoolsr = 13c = 5a = np.arange(r*c).reshape(r, c)a = list(itertools.product(*a))res = sum([sum(e) for e in a])/len(a)代碼崩潰,因為 r 似乎有點太大,itertools/python 無法處理它。有沒有其他方法可以在不讓代碼崩潰的情況下計算res ?
查看完整描述

1 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

您不必要地首先收集products,然后收集個人sums,當lists您也可以迭代迭代器時。您也不需要len列表,因為您可以直接計算產品的數量。

res = sum(sum(e) for e in itertools.product(*a))/c**r

這將消耗更少的內存,這可能會防止您的計算機死機或崩潰。然而,對于r=13c=5,這仍然意味著測試c**r = 1,220,703,125組合,這對于 Python 來說可能太多了。

但是,由于您獲取的是所有產品,因此每個元素在所有產品中出現的次數相同,因此您根本不必實際計算和迭代產品。相反,您可以像這樣直接計算產品的平均總和:

res = sum(sum(a)) // c   # here, a is the numpy array, not the product iterator

(這是針對所有元素數量相同的列表;如果列表大小不同,公式會稍微復雜一些,但仍然可以直接計算,無需任何循環。)


查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號