これは私のために働く。しかし、要素を順番に生成するのではなく、まず要素を生成して並べ替えます。
n = 5
i = np.array(np.indices(n * (2,))).reshape(n, -1)
i[:, np.argsort(i.sum(0)[::-1], kind='mergesort')].T[::-1]
安定したソート、同点の場合には元の順序を保存する、すなわちいずれかを使用して、それらの数字の和でバイナリワードをソート。順序で単語を生成
溶液をitertools
itertools.chain((n*(0,),), (l[0] * (0,) + sum(((1,) + (i-j-1) * (0,) for i, j in zip(l[1:], l[:-1])),()) + (1,) + (n-l[-1]-1)*(0,) for k in range(1,n+1) for l in itertools.combinations(range(n), k)))
で構成することができるこれはものK(K = 0特殊ケーシングとitertools.chain
を使用して付加されている)の数をループ。各Kことは全てK要素サブセットセットのリットル `{0、1、...、N -1}作成するitertools.combinations
を使用してバイナリワードに各サブセットを変換します。この変換は、lの要素ごとに1を入れ、その間にいくつのゼロを入れなければならないかを計算することによって機能します。先頭と末尾の0は特殊なケースにする必要がありました。
出力例:numpy
:
# array([[0, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0],
[0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [1, 1, 0, 0, 0], [1, 0, 1, 0, 0],
[1, 0, 0, 1, 0], [1, 0, 0, 0, 1], [0, 1, 1, 0, 0], [0, 1, 0, 1, 0],
[0, 1, 0, 0, 1], [0, 0, 1, 1, 0], [0, 0, 1, 0, 1], [0, 0, 0, 1, 1],
[1, 1, 1, 0, 0], [1, 1, 0, 1, 0], [1, 1, 0, 0, 1], [1, 0, 1, 1, 0],
[1, 0, 1, 0, 1], [1, 0, 0, 1, 1], [0, 1, 1, 1, 0], [0, 1, 1, 0, 1],
[0, 1, 0, 1, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 0], [1, 1, 1, 0, 1],
[1, 1, 0, 1, 1], [1, 0, 1, 1, 1], [0, 1, 1, 1, 1], [1, 1, 1, 1, 1]])
itertools
:
list(_)
# [(0, 0, 0, 0, 0), (1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (0, 0, 0, 1, 0), (0, 0, 0, 0, 1),
(1, 1, 0, 0, 0), (1, 0, 1, 0, 0), (1, 0, 0, 1, 0), (1, 0, 0, 0, 1), (0, 1, 1, 0, 0), (0, 1, 0, 1, 0),
(0, 1, 0, 0, 1), (0, 0, 1, 1, 0), (0, 0, 1, 0, 1), (0, 0, 0, 1, 1), (1, 1, 1, 0, 0), (1, 1, 0, 1, 0),
(1, 1, 0, 0, 1), (1, 0, 1, 1, 0), (1, 0, 1, 0, 1), (1, 0, 0, 1, 1), (0, 1, 1, 1, 0), (0, 1, 1, 0, 1),
(0, 1, 0, 1, 1), (0, 0, 1, 1, 1), (1, 1, 1, 1, 0), (1, 1, 1, 0, 1), (1, 1, 0, 1, 1), (1, 0, 1, 1, 1),
(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)]
ありがとうございました!私は明日コンピュータをもう一度持っているときにこの最初のことを試してみるつもりです:)私は今、私の電話にいます。 –
itertoolsコードについて説明できますか?私はn = 40とkの範囲(1,2)にしようとしています。これはちょうど41の本当の基本ベクトルを与えるべきですが、何らかの理由でそれは永遠にかかります。最適化を手伝ってもらえますか? –
@ Perm.Questiin私は 'n = 40、k(1、2)'の範囲で試してみました。結果にリストを適用しましたか?コードをもっとうまく説明できる方法を見ていきます。 –