我正在使用numpy在numpy数组的第一列中找到不同的元素我正在使用下面的代码我也看看np.unique方法但我找不到合适的函数
k = 0
c = 0
nonrep=[]
for i in range(len(xin)):
for j in range(len(nonrep)):
if(xin[i,0]==nonrep[j]):
c = c+1
if(c==0):
nonrep.append(xin[i,0])
c=0
我相信我可以使用numpy库更好更快地完成它,如果你帮助我找到更好更快的方法,我会很高兴
答案 0 :(得分:2)
这绝对不是一个好方法。从这里开始执行成员资格检查。此外,在找到元素后,您甚至不会break
。这使它成为 O(n 2 )算法。
您可以简单地使用:
np.unique(xin[:,0])
这将在 O(n log n)中起作用。这仍然不是最有效的方法。
如果您确实需要快速计算,可以更好地使用pandas
:
import pandas as pd
pd.DataFrame(xin[:,0])[0].unique()
这适用于 O(n)(给定元素可以有效散列)并进一步保留顺序。这里的结果又是一个numpy数组。
喜欢@ B.M.他们在评论中说,你可以阻止构建一个1列的数据帧,而是构建一个序列:
import pandas as pd
pd.Series(xin[:,0]).unique()