Shinjitsu - 1 year ago 114

Python Question

So I have this list called sumErrors that's 16000 rows and 1 column, and this list is already presorted into 5 different clusters. And what I'm doing is slicing the list for each cluster and finding the index of the minimum value in each slice.

However, I can only find the first minimum index using argmin(). I don't think I can just delete the value, because otherwise it would shift the slices over and the indices is what I have to recover the original ID. Does anyone know how to get argmin() to spit out indices for the lowest three?

Or perhaps a more optimal method? Maybe I should just assign ID numbers, but I feel like there maybe a more elegant method.

Answer

Numpy includes an `argsort`

function which will return all the indices. If I understand your requirement correctly, you should be able to do:

```
minidx = []
for cluster in sumErrors:
minidx.append(np.argsort(cluster)[:3])
```

Source (Stackoverflow)