Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 10亿次置换后的Itertools饱和度_Python_Itertools - Fatal编程技术网

Python 10亿次置换后的Itertools饱和度

Python 10亿次置换后的Itertools饱和度,python,itertools,Python,Itertools,我编写了以下代码来计算列表的所有排列之间获得的和的平均值: import numpy as np import itertools r = 13 c = 5 a = 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而不让代码崩溃?您不必

我编写了以下代码来计算列表的所有排列之间获得的和的平均值:

import numpy as np
import itertools

r = 13
c = 5
a = 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而不让代码崩溃?

您不必要地首先收集
产品
,然后在
列表
中单独的
求和
,这时您可以迭代迭代器。您也不需要列表的
len
,因为您可以直接计算产品的数量

res = sum(sum(e) for e in itertools.product(*a))/c**r
这将消耗更少的内存,这可能使您的计算机不会冻结或崩溃。然而,对于
r=13
c=5
,这仍然意味着测试
c**r=1220703125
组合,这对于Python来说可能太多了

但是,由于您获得的是所有产品,因此每个元素在所有产品中出现的次数相同,因此您根本不必实际计算和迭代产品。相反,您可以直接这样计算乘积的平均和:

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

(这适用于具有相同元素数量的所有列表;如果列表具有不同的大小,则公式会稍微复杂一些,但仍然可以不使用任何循环直接计算。)

您不需要首先收集
产品,然后,
中的单个
求和
列出
,此时您也可以迭代迭代器。您也不需要列表的
len
,因为您可以直接计算产品的数量

res = sum(sum(e) for e in itertools.product(*a))/c**r
这将消耗更少的内存,这可能使您的计算机不会冻结或崩溃。然而,对于
r=13
c=5
,这仍然意味着测试
c**r=1220703125
组合,这对于Python来说可能太多了

但是,由于您获得的是所有产品,因此每个元素在所有产品中出现的次数相同,因此您根本不必实际计算和迭代产品。相反,您可以直接这样计算乘积的平均和:

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

(这适用于具有相同元素数的所有列表;如果列表具有不同的大小,则公式会稍微复杂一些,但仍然可以直接计算而不使用任何循环。)

报告“代码崩溃”时,请提供确切的堆栈跟踪和异常消息。无论如何,这看起来像是一个编码挑战,这最终不需要任何迭代。应该可以直接从
r
c
计算结果。报告“代码崩溃”时,请提供准确的堆栈跟踪和异常消息。无论如何,这看起来像是一个编码挑战,最终不需要任何迭代。应该可以直接从
r
c
计算结果。