3

機械学習アルゴリズム(8-3-8壁画ネットワークエンコーダー)をテストするために、可能なすべてのバイトを生成しようとしています。8つのループを持たずにPythonでこれを行う方法はありますか?

順列は役に立ちますか?

私はこれを行うためのエレガントな方法を好みますが、私は現時点で得られるものを採用します。

必要な出力:

[0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,0,1]
[0,0,0,0,0,0,1,0]
[0,0,0,0,0,0,1,1]
[0,0,0,0,0,1,0,0]
[0,0,0,0,0,1,0,1]
.
.
.
[1,1,1,1,1,1,1,1]
4

4 に答える 4

11

はい、あります、itertools.product

import itertools


itertools.product([0, 1], repeat=8)
>>> list(itertools.product([0, 1], repeat=8))
[(0, 0, 0, 0, 0, 0, 0, 0),
 (0, 0, 0, 0, 0, 0, 0, 1),

[...]

 (1, 1, 1, 1, 1, 1, 1, 0),
 (1, 1, 1, 1, 1, 1, 1, 1)]
于 2013-03-21T02:29:15.400 に答える
6
[[x>>b&1 for b in range(8)] for x in range(256)]
于 2013-03-21T02:34:28.153 に答える
4

数値を繰り返し処理してから、バイナリに変換できます。

[bin(x)[2:] for x in range(256)]
于 2013-03-21T02:28:08.023 に答える
1

すでにnumpyを使用している場合...

In [48]: import numpy as np

In [49]: nbits = 4

In [50]: np.sign(np.bitwise_and(2 ** np.arange(nbits), np.arange(2 ** nbits).reshape(-1, 1)))
Out[50]: 
array([[0, 0, 0, 0],
       [1, 0, 0, 0],
       [0, 1, 0, 0],
       [1, 1, 0, 0],
       [0, 0, 1, 0],
       [1, 0, 1, 0],
       [0, 1, 1, 0],
       [1, 1, 1, 0],
       [0, 0, 0, 1],
       [1, 0, 0, 1],
       [0, 1, 0, 1],
       [1, 1, 0, 1],
       [0, 0, 1, 1],
       [1, 0, 1, 1],
       [0, 1, 1, 1],
       [1, 1, 1, 1]])
于 2013-03-21T03:21:39.753 に答える