可能重复: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 回答
我不是100%确定你的代码是什么,忽略边界处的索引问题等同于
但您可以使用形态学操作快速完成这些计算的高级版本:
保持这种“变得讨厌”的方法是:在函数中封装邻居检查代码 . 然后,您可以在必要时使用邻居的坐标来调用它 .
如果你需要跟踪你检查过哪些对,以便你不保留相同的对,请在其上使用某种记忆 .