【发布时间】:2020-05-02 01:28:30
【问题描述】:
我正在尝试将 11 个值的所有可能组合重复 80 次,但过滤掉总和大于 1 的情况。下面的代码实现了我想要做的,但需要几天才能运行:
import numpy as np
import itertools
unique_values = np.linspace(0.0, 1.0, 11)
lst = []
for p in itertools.product(unique_values , repeat=80):
if sum(p)<=1:
lst.append(p)
上述解决方案可行,但需要太多时间。此外,在这种情况下,我必须定期将“lst”保存到磁盘中并释放内存以避免任何内存错误。后一部分很好,但代码需要几天(或几周)才能完成。
还有其他选择吗?
【问题讨论】:
-
unique_values = np.linspace(0.0, 1.0, 11)是真实的还是一个例子? -
在numpy中围绕itertools.product的stackoverflow有几种实现,可能会更快,否则,我会尝试用C或其他快速语言来实现。另外,为什么
np.linspace(0.0, 1.0, 11)而不是range(12)? -
np.linspace(0.0, 1.0, 11)是真实的。上面的例子正是我想要得到的。如果我使用range(12),我将无法检查总和是否低于 1 -
@Stergios 那么你只需要 10 个的 42 个分区,缩小 10 倍:wolframalpha.com/input/?i=partitions+of+10
-
这最终是为了什么?存储数千兆字节的大多数为零的列表真的是您的最佳选择吗?
标签: python itertools cartesian-product