我可以向量化此python代码吗?

路卡

我已经编写了此python代码来获取标签的邻居(一组共享某些共同属性的像素)。标签的邻居定义为位于边界另一侧的其他标签(相邻标签共享边界)。因此,我编写的代码可以运行,但是速度非常慢:

# segments: It is a 2-dimensional numpy array (an image really)
# where segments[x, y] = label_index. So each entry defines the
# label associated with a pixel.

# i: The label whose neighbours we want.

def get_boundaries(segments, i):
    neighbors = []
    for y in range(1, segments.shape[1]):
        for x in range(1, segments.shape[0]):
            # Check if current index has the label we want 
            if segments[x-1, y] == i:
                # Check if neighbour in the x direction has
                # a different label
                if segments[x-1, y] != segments[x, y]:
                    neighbors.append(segments[x,y])

            # Check if neighbour in the y direction has
            # a different label
            if segments[x, y-1] == i:
                if segments[x, y-1] != segments[x, y]:
                    neighbors.append(segments[x, y])

    return np.unique(np.asarray(neighbors))

如您所料,我可能在这里完全滥用了python。我想知道是否有一种方法可以优化此代码,使其更具pythonic风格。

约翰·兹温克

干得好:

def get_boundaries2(segments, i):
    x, y = np.where(segments == i) # where i is
    right = x + 1
    rightMask = right < segments.shape[0] # keep in bounds
    down = y + 1
    downMask = down < segments.shape[1]
    rightNeighbors = segments[right[rightMask], y[rightMask]]
    downNeighbors = segments[x[downMask], down[downMask]]
    neighbors = np.union1d(rightNeighbors, downNeighbors)
    return neighbors

如您所见,根本没有Python循环。我还尝试最小化副本(第一次尝试segments使用NAN边框进行副本的复制,但是后来我设计了“保持边界”检查)。

注意,我并没有i从“邻居”中过滤掉自己。您可以根据需要在结尾处轻松添加。一些时间:

输入2000x3000:原始耗时13秒,我的耗时370毫秒(加速35倍)。

输入1000x300:原始耗时643毫秒,我的耗时17.5毫秒(36倍加速)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以向量化此Python代码吗?

来自分类Dev

可以在python中向量化此数组操作吗?

来自分类Dev

加快python代码的速度-我可以向量化double for循环吗?

来自分类Dev

如何向量化此代码?

来自分类Dev

有什么办法可以向量化这个Matlab代码吗?

来自分类Dev

有什么办法可以向量化这个Matlab代码吗?

来自分类Dev

我可以提高此Python代码的性能吗?

来自分类Dev

我需要在python中向量化此操作

来自分类Dev

如何“向量化”此重复的C ++代码?

来自分类Dev

我如何向量化以下python代码(图像过渡)?

来自分类Dev

我如何向量化此for循环?

来自分类Dev

我如何向量化此操作?

来自分类Dev

可以将此代码进一步向量化以消除循环吗?

来自分类Dev

如何向量化此python代码以使其更高效?(速度)

来自分类Dev

如何向量化此python代码以使其更高效?(速度)

来自分类Dev

运行此python代码时出现错误。错误是“ ElementNotInteractableException”。可以帮我吗?

来自分类Dev

有人可以告诉我此python代码有什么问题吗?

来自分类Dev

向量化此循环

来自分类Dev

如何向量化以下python代码?

来自分类Dev

为什么gcc无法向量化此直线代码?

来自分类Dev

如何在R中向量化此代码

来自分类Dev

如何以向量化形式编写此numpy代码?

来自分类Dev

有没有一种方法可以在matlab / octave中向量化此代码段?

来自分类Dev

我可以改善此代码以绘制轮廓文字吗

来自分类Dev

有人可以向我解释此代码吗?

来自分类Dev

我可以将单词或句子与Python中预先向量化的句子语料库进行匹配以进行NL处理吗?

来自分类Dev

我可以使用LLVM jit生成AVX矢量化代码吗?

来自分类Dev

嵌套循环Numpy数组:可以向量化吗?

来自分类Dev

我使用cx_Freeze编译了我的python代码,代码在此之前运行良好,现在显示此错误有人可以帮助我吗?

Related 相关文章

  1. 1

    我可以向量化此Python代码吗?

  2. 2

    可以在python中向量化此数组操作吗?

  3. 3

    加快python代码的速度-我可以向量化double for循环吗?

  4. 4

    如何向量化此代码?

  5. 5

    有什么办法可以向量化这个Matlab代码吗?

  6. 6

    有什么办法可以向量化这个Matlab代码吗?

  7. 7

    我可以提高此Python代码的性能吗?

  8. 8

    我需要在python中向量化此操作

  9. 9

    如何“向量化”此重复的C ++代码?

  10. 10

    我如何向量化以下python代码(图像过渡)?

  11. 11

    我如何向量化此for循环?

  12. 12

    我如何向量化此操作?

  13. 13

    可以将此代码进一步向量化以消除循环吗?

  14. 14

    如何向量化此python代码以使其更高效?(速度)

  15. 15

    如何向量化此python代码以使其更高效?(速度)

  16. 16

    运行此python代码时出现错误。错误是“ ElementNotInteractableException”。可以帮我吗?

  17. 17

    有人可以告诉我此python代码有什么问题吗?

  18. 18

    向量化此循环

  19. 19

    如何向量化以下python代码?

  20. 20

    为什么gcc无法向量化此直线代码?

  21. 21

    如何在R中向量化此代码

  22. 22

    如何以向量化形式编写此numpy代码?

  23. 23

    有没有一种方法可以在matlab / octave中向量化此代码段?

  24. 24

    我可以改善此代码以绘制轮廓文字吗

  25. 25

    有人可以向我解释此代码吗?

  26. 26

    我可以将单词或句子与Python中预先向量化的句子语料库进行匹配以进行NL处理吗?

  27. 27

    我可以使用LLVM jit生成AVX矢量化代码吗?

  28. 28

    嵌套循环Numpy数组:可以向量化吗?

  29. 29

    我使用cx_Freeze编译了我的python代码,代码在此之前运行良好,现在显示此错误有人可以帮助我吗?

热门标签

归档