我有两个数组:
>>> import numpy as np
>>> a=np.array([2, 1, 3, 3, 3])
>>> b=np.array([1, 2, 3, 3, 3])
比较这两个数组元素相等的最快方法是什么,而不管顺序如何?在
编辑 我测量了以下函数的执行时间:
^{pr2}$结果是:
>>> import timeit
>>> timeit.timeit(compare1,number=1000)
0.0166780948638916
>>> timeit.timeit(compare2,number=1000)
0.016178131103515625
>>> timeit.timeit(compare3,number=1000)
0.008063077926635742
>>> timeit.timeit(compare4,number=1000)
0.03257489204406738
奥迪奥戈席尔瓦的“设置”方法似乎是最快的。在
你知道我可以测试的其他方法吗?在
编辑2 上面的运行时并不是比较数组的正确方法,正如user2357112的注释中所解释的那样。在
#test.py
import numpy as np
import numpy.lib.arraysetops as aso
#without duplicates
N=10000
a=np.arange(N,0,step=-2)
b=np.arange(N,0,step=-2)
def compare1():
temp=0
for i in a:
temp+=len(np.where(b==i)[0])
if temp==len(a):
val=True
else:
val=False
return val
def compare2():
val=np.all(np.sort(a)==np.sort(b))
return val
def compare3():
val=set(a)==set(b)
return val
def compare4():
val=len(aso.setdiff1d(a,b))==0
return val
输出为:
>>> from test import *
>>> import timeit
>>> timeit.timeit(compare1,number=1000)
101.16708397865295
>>> timeit.timeit(compare2,number=1000)
0.09285593032836914
>>> timeit.timeit(compare3,number=1000)
1.425955057144165
>>> timeit.timeit(compare4,number=1000)
0.44780397415161133
现在compare2是最快的。还有什么方法可以比这个更有效吗?在
要查看两个数组是否包含相同类型的元素,在本例中为[1,2,3],可以执行以下操作:
Numpy作为集合操作的集合。在
相关问题 更多 >
编程相关推荐