所以在我目前的代码中我使用
im_set=set(map(tuple, im_list[0]))
将列表转换为集合。但它很慢。是否有更快/无地图方法来加快速度?这是我目前的代码
while True:
cam = cv2.VideoCapture(0)
start=time.time()
while(cam.isOpened()): #Opens camera
ret, im = cam.read() #Takes screenshot
#im=cv2.imread('RGB.png')
im=cv2.resize(im,(325,240)) #Resize to make it faster
im= im.reshape(1,-1,3)
#im=OneNumber(im) #Converts the pixels rgb to a singe number
im_list=im.tolist()
im_set=set(map(tuple, im_list[0]))
ColourCount= set(im_set) & set(om_set)
print len(ColourCount)
print N
end=time.time()-start
print end
请注意,om_set来自不同的程序。
无论如何,基本上我必须将np.array转换为一个集合,并比较该集合以查看与它们重叠的内容。但是,它很慢。有没有一种方法可以用来加速转换?
答案 0 :(得分:0)
如果您使用的是Python 3,那将会很快;但是在Python 2中,你应该使用集合理解:
im_set = {tuple(item) for item in im_list[0]}
Python中的 map()
速度较慢,因为它返回一个列表。这意味着在您开始创建集合之前,每个元组都存储在内存中。但是,这样,您将每个项目添加到集合中,因为它将转换为元组。
答案 1 :(得分:0)
Using itertools.imap is going to be faster:
In [18]: from itertools import imap
In [19]: timeit set(imap(tuple, l))
100 loops, best of 3: 2.27 ms per loop
In [20]: timeit {tuple(item) for item in l}
100 loops, best of 3: 2.69 ms per loop
You also don't need to create extra sets, you use the ones you have created and use set.intersection:
im_set.intersection(om_set)
Unless you specifically need lists this can also all be done using numpy.