-1

Python スクリプトは、次のようになります。

>>> a=[[1,2,3],[4,5,6],[7,8,9,10]]
>>> b=itertools.product(*a)
>>> b

これで b には次の要素が含まれます。

[(1,4,7),(1,4,9), .......]すべての組み合わせ

itertools.product によって返されたこのオブジェクトの要素にアクセスする方法. すると, このlist(itertools.product(*a))中の多数の要素に対してaメモリ エラーが発生します.

上記のコードの目的は、そのような組み合わせを最大の関連値で取得することです。

この値は、最初の反復中に計算され、合計 argmax(scores) のインデックスに基づいて、score[] に格納されます。オブジェクトから特定の組み合わせを取得したい

インデックス i のそのような要素を再度反復するとコストがかかりますか?

コード スニペット、(網羅的な方法) CodeLink

4

3 に答える 3

2

一般に、itertools の背後にある考え方は、返されたオブジェクトを反復処理することです。

for item in itertools.product(*a):
    do_something(item)

一度に複数のアイテムが必要な場合は、MemoryError自分自身を取得せずにそれらをキャッシュする方法を考え出す必要があります。

于 2013-10-01T05:00:34.857 に答える
0

関数の最大値を持つアイテムのみに関心がある場合は、次のようにします。

max_item = None

for i in itertools.product(*a):
   if not max_item:
      # First loop
      max_item = (somefunc(i),i)
      continue

   if max_item and max_item[1] < somefunc(i):
      # This item's calulated value is the new max
      max_item = (somefunc(i),i)       

print('The maximum value is {} for the item {}'.format(*max_item))
于 2013-10-01T05:25:25.973 に答える