首页 文章

比较矩阵中相邻单元格的更好方法[重复]

提问于
浏览
1

可能重复:Numpy / Python:没有for循环的数组迭代

假设我有一个大小为100x100的矩阵,我想将每个像素与其直接邻居(左,上,右,下)进行比较,然后对当前矩阵或相同大小的新矩阵进行一些操作 . Python / Numpy中的示例代码可能如下所示:(比较> 0.5没有任何意义,我只是想在比较邻居时为某些操作提供一个工作示例)

import numpy as np
my_matrix = np.random.rand(100,100)
new_matrix = np.array((100,100))
my_range = np.arange(1,99)
for i in my_range:
    for j in my_range:

        if my_matrix[i,j+1] > 0.5:
            new_matrix[i,j+1] = 1

        if my_matrix[i,j-1] > 0.5:
            new_matrix[i,j-1] = 1

        if my_matrix[i+1,j] > 0.5:
            new_matrix[i+1,j] = 1

        if my_matrix[i-1,j] > 0.5:
            new_matrix[i-1,j] = 1

        if my_matrix[i+1,j+1] > 0.5:
            new_matrix[i+1,j+1] = 1

        if my_matrix[i+1,j-1] > 0.5:
            new_matrix[i+1,j-1] = 1

        if my_matrix[i-1,j+1] > 0.5:
            new_matrix[i-1,j+1] = 1

如果我想进入一个相邻的单元并从它开始将它与邻居进行比较,这可能会变得非常讨厌......您是否有一些建议如何以更有效的方式完成此操作?这甚至可能吗?

2 回答

  • 2

    我不是100%确定你的代码是什么,忽略边界处的索引问题等同于

    new_matrix = my_matrix > 0.5
    

    但您可以使用形态学操作快速完成这些计算的高级版本:

    import numpy as np
    from scipy.ndimage import morphology
    
    a = np.random.rand(5,5)
    b = a > 0.5
    
    element = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])
    result = morphology.binary_dilation(b, element) * 1
    
  • 0

    保持这种“变得讨厌”的方法是:在函数中封装邻居检查代码 . 然后,您可以在必要时使用邻居的坐标来调用它 .

    如果你需要跟踪你检查过哪些对,以便你不保留相同的对,请在其上使用某种记忆 .

相关问题