2016-04-18 11 views
1

Ich versuche, alle Kombination von numpy Array zu erzeugen, die eine Bedingung effizient meinen Code jetzt erfüllen wie folgt aussiehtKombination aus numpy Array erfüllt Bedingung

import numpy as np 
import itertools 

a = np.array([1,11,12,13]) 
a = np.tile(a,(13,1)) 
a = a.flatten() 

for c in itertools.combinations(a,4): 
    if np.sum(c)==21: 
    print(c) 
+0

a = np.tile (a, 4) ist für dieses Problem ausreichend. Suchen Sie nach einer allgemeinen Lösung? –

Antwort

0

Wenn Sie nur über einzigartige Kombinationen kümmern (und es gibt nur 256 von ihnen), können Sie itertools.product verwenden:

version_1 = np.vstack(list(sorted({tuple(row) for row in list(itertools.combinations(a, 4))}))) # unique combinations, your way 
version_2 = np.array(list(itertools.product((1, 11, 12, 13), repeat=4))) # same result, but faster 
assert (version_1 == version_2).all() 

ich this answer bin mit der einzigartigen Elemente eines Numpy Array zu erhalten.

So würde die endgültige Antwort sein:

import itertools, numpy as np 
a = np.array(list(itertools.product((1, 11, 12, 13), repeat=4))) 
for arr in a[a.sum(axis=1) == 21]: 
    print(arr) 
Verwandte Themen