2017-06-01 1 views

Antwort

1

Flatten und sortiere das Array und erhalte die ersten 3 Elemente.

sorted(x.flatten())[:3] 
Out[275]: [0, 1, 2] 

Oder ein schneller Ansatz:

sorted(sum(x.tolist(),[]))[:3] 

%timeit sorted(sum(x.tolist(),[]))[:3] 
The slowest run took 7.38 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 2.14 µs per loop 

%timeit sorted(x.flatten())[:3] 
The slowest run took 11.54 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 4.97 µs per loop 
2

Eine Möglichkeit argsort auf werden abgeflacht Ansicht zu verwenden wäre -

x.ravel()[x.ravel().argsort()[:3]] 

performanter ein mit np.argpartition -

x.ravel()[x.ravel().argpartition(range(3))[:3]] 

Oder mit sort es danach zu sortieren -

np.sort(x.ravel()[x.ravel().argpartition(3)[:3]]) 

Wenn Sie die Zahlen nicht egal, überspringen sort sortiert werden -

x.ravel()[x.ravel().argpartition(3)[:3]] 

Probelauf -

In [44]: x 
Out[44]: 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 0]]) 

In [45]: x.ravel()[x.ravel().argsort()[:3]] 
Out[45]: array([0, 1, 2]) 

In [48]: x.ravel()[x.ravel().argpartition(range(3))[:3]] 
Out[48]: array([0, 1, 2]) 

In [52]: np.sort(x.ravel()[x.ravel().argpartition(3)[:3]]) 
Out[52]: array([0, 1, 2]) 

In [47]: x.ravel()[x.ravel().argpartition(3)[:3]] 
Out[47]: array([0, 1, 2]) 
+2

'argpartition' ist der Weg zu gehen. Sein * O (log n) * wo 'argsort' ist * O (n log n) * – piRSquared