1

これは簡単な問題だと確信していますが、これを修正する方法を完全に黒くしています。私はcourseraのPGMクラスを進めようとしていますが、それは同時確率分布から始まります。だから私は n 変数が与えられたすべての可能な分布のリストを生成しようとしています。ここで、各変数は 0...z の間の離散値を取ることができます

たとえば、3 つの変数があり、それぞれが 0 と 1 の値を取ることができるとします。これを生成したいと思います。

[[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
[1, 1, 0]
[0, 1, 1]
[1, 1, 1]
[1, 0, 1]
[0, 0, 0]]

私はこれを動的に生成する方法について空白を描いています。

4

3 に答える 3

3

リスト内包表記を好む場合:

[[a, b, c] for a in range(2) for b in range(2) for c in range(2)]

また、 pprint を使用して必要な効果を得ることができることを忘れていました。

>>> import pprint  
>>> pprint.pprint([[a, b, c] for a in range(2) for b in range(2) for c in range(2)])  
[[0, 0, 0],  
 [0, 0, 1],  
 [0, 1, 0],  
 [0, 1, 1],  
 [1, 0, 0],  
 [1, 0, 1],  
 [1, 1, 0],  
 [1, 1, 1]]  
>>>   
于 2013-02-11T03:27:22.513 に答える
2

デカルト積が必要なようです:

from itertools import product
for x in product([0,1], [0,1], [0,1]):
    print x

[0, 0, 0]
[0, 0, 1]
[0, 1, 0]
[0, 1, 1]
[1, 0, 0]
[1, 0, 1]
[1, 1, 0]
[ 1、1、1]

于 2013-02-10T22:13:23.437 に答える
1

ネイサンの方法をわずかに改善:

>>> import itertools
>>> list(itertools.product([0, 1], repeat=3))
[(0, 0, 0),
 (0, 0, 1),
 (0, 1, 0),
 (0, 1, 1),
 (1, 0, 0),
 (1, 0, 1),
 (1, 1, 0),
 (1, 1, 1)]
于 2013-02-11T03:29:11.793 に答える