J Cena
J Cena

Reputation: 1063

How to filter a numpy array using a condition in python

I am using my numpy array v as follows to remove elements that are <=1 and then select the indexes of the top 3 elements in the numpy array.

 for ele in v.toarray()[0].tolist():
        if ele <= 1:
            useless_index = v.toarray()[0].tolist().index(ele)
            temp_list.append(useless_index)

 #take top 3 words from each document
 indexes =v.toarray()[0].argsort()[-3:]
 useful_list = list(set(indexes) - set(temp_list))

However, the current code I am using is very slow (as I have millions of numpy arrays) and take days to run. Is there any efficient way of doing the same thing in python?

Upvotes: 3

Views: 9901

Answers (1)

Mateen Ulhaq
Mateen Ulhaq

Reputation: 27271

v = v[v > 1]
indices = np.argpartition(v, -3)[-3:]
values = v[indices]

As mentioned here, argpartition runs in O(n + k log k) time. In your case, n = 1e6, k=3.

Upvotes: 4

Related Questions