第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

10億次排列后itertools飽和

10億次排列后itertools飽和

哆啦的時光機(jī) 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)代碼崩潰,因?yàn)?r 似乎有點(diǎn)太大,itertools/python 無法處理它。有沒有其他方法可以在不讓代碼崩潰的情況下計算res ?
查看完整描述

1 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個贊

您不必要地首先收集products,然后收集個人sums,當(dāng)lists您也可以迭代迭代器時。您也不需要len列表,因?yàn)槟梢灾苯佑嬎惝a(chǎn)品的數(shù)量。

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

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

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

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

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


查看完整回答
反對 回復(fù) 2023-05-23
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號