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?
解决方案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.