Reputation: 1063
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
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