【问题标题】:How to optimize this code? (Double loop in python, with an list)如何优化这段代码? (python中的双循环,带有列表)
【发布时间】:2019-12-11 23:42:11
【问题描述】:
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 会更好。

【问题讨论】:

    标签: python loops numpy opencv optimization


    【解决方案1】:

    唯一的

    my_list = imggray[imgbinary == 255]
    

    imgbinary == 255 生成二维布尔数组,然后从数组中选择值 排序也是无用的,因为值是相等的

    【讨论】:

    • 我觉得你读得太快了。应该是mylist = imggray[imgbinary == 255]
    • 但我需要 imggray 的值
    • 我会测试一下:“mylist = imggray[imgbinary == 255]”
    • 哦好吧 imggray 在那里
    • 嘿,你错了,当你说排序是无用的,因为值是相等的。它是灰度图像数据,而不是二进制数据。
    【解决方案2】:

    你也可以试试np.where:

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

    【讨论】:

      【解决方案3】:

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

      这应该可以在不使用任何循环的情况下正常工作:

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

      20 x 20 图像的速度:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 2015-07-24
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        相关资源
        最近更新 更多