如何优化此代码? (python中的双循环,带有列表)

时间:2019-08-03 20:21:01

标签: python loops numpy opencv optimization

my_list = []
for x in range(len(imgbinary)):
    for y in range(len(imgbinary[0])):
        if imgbinary[x][y]==255 :
            my_list.append(imggray[x][y])

my_list.sort()          

我希望这段代码尽可能快,我确定使用numpy会更好。

3 个答案:

答案 0 :(得分:0)

my_list = imggray[imgbinary == 255]

imgbinary == 255生成2d布尔数组,然后从数组中选择值 由于值相等,排序也没用

答案 1 :(得分:0)

您也可以尝试np.where

my_list = sorted(imggray[np.where(imgbinary==255)])

答案 2 :(得分:0)

根据您的代码,您想要在imggray等于255的像素位置获取imgbinary的值。

这应该可以正常工作,而无需使用任何循环:

my_list = sorted(imggray[imgbinary ==255])

以20乘20幅图像显示速度:

%timeit sorted(imggray[imgbinary ==255])
10000 loops, best of 3: 111 µs per loop