は、私はこれらの式中、n = len(long_list)
、n×nの正方行列の上部trianleの指標である
np.triu_indices
に基づいて発電機を使用したい一つの大きなリストにメモリ内の全ての組み合わせをロード
問題は、インデックス全体が最初に作成されることです。 itertoolsはこれを実行せず、一度に1つの組み合わせしか生成しません。
def combinations_of_2(l):
for i, j in zip(*np.triu_indices(len(l), 1)):
yield l[i], l[j]
long_list = list('abc')
c = combinations_of_2(long_list)
list(c)
[('a', 'b'), ('a', 'c'), ('b', 'c')]
は一度
a = np.array(long_list)
i, j = np.triu_indices(len(a), 1)
np.stack([a[i], a[j]]).T
array([['a', 'b'],
['a', 'c'],
['b', 'c']],
dtype='<U1')
タイミング
long_list = pd.DataFrame(np.random.choice(list(ascii_letters), (3, 1000))).sum().tolist()
でそれらのすべてを取得するには
リストにすべてをロードするのではなく、それを繰り返していたら、たくさんのRAMを使うことはありません...実際に何をしようとしていますか?実際にすべての組み合わせを生成する必要がありますか?またはランダムなものを選ぶだけでいいですか?あなたはどれくらいの数があるか知る必要がありますか? –
組み合わせには何が必要ですか? 'list'呼び出しを削除した場合、メモリはほとんど消費されませんが、一度に1つの組み合わせではなく、一度に1つの組み合わせしか取得できません。いずれにせよ、4億5千万もの組み合わせがあるので、それらを使って何かするとかなりの時間がかかる可能性があります。 – BrenBarn
https://scipy.github.io/devdocs/generated/scipy.special.binom.htmlを見たことがありますか? – denvaar