Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to filter a numpy array using a condition in python

Tags:

python

numpy

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?

like image 504
J Cena Avatar asked Feb 28 '26 01:02

J Cena


1 Answers

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.

like image 91
Mateen Ulhaq Avatar answered Mar 01 '26 14:03

Mateen Ulhaq