Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较矩阵中相邻单元的更好方法_Python_Matlab_Matrix_Numpy_Scipy - Fatal编程技术网

Python 比较矩阵中相邻单元的更好方法

Python 比较矩阵中相邻单元的更好方法,python,matlab,matrix,numpy,scipy,Python,Matlab,Matrix,Numpy,Scipy,可能重复: 假设我有一个100x100大小的矩阵,我想将每个像素与其直接相邻的像素(左、上、右、下)进行比较,然后对当前矩阵或相同大小的新矩阵执行一些操作。 Python/Numpy中的示例代码如下所示: (比较>0.5没有任何意义,我只想给出一个工作示例,用于比较邻居时的一些操作) 如果我想进入一个相邻的单元并从它开始与它的相邻单元进行比较,这会变得非常糟糕。。。你对如何更有效地完成这项工作有什么建议吗?这可能吗?我不能100%确定您的代码的目标是什么,忽略边界处的索引问题相当于 new_m

可能重复:

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


如果我想进入一个相邻的单元并从它开始与它的相邻单元进行比较,这会变得非常糟糕。。。你对如何更有效地完成这项工作有什么建议吗?这可能吗?

我不能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
防止这种情况“恶化”的方法是:将邻居检查代码封装在函数中。然后你可以在必要的时候用邻居的坐标来调用它


如果你需要记录你检查过的配对,这样你就不会保留相同的配对,那么在上面使用某种备忘录。

也许你应该澄清你想要什么。。。就这样,看起来你想知道哪个值为1的像素被8个像素包围,每个像素都有1。是这样吗?谢谢,我将研究形态学运算(以前从未听说过)。正如我在更新的帖子中所写的那样,>0.5应该只是一些操作的一个例子……维基百科的文章和这个网站:是一个很好的开始。页面底部的“练习1”显示了我的示例中的结构元素。我想我知道了,但是,它对第二个问题没有帮助。如果一个邻居满足一个特定的条件,我想从这个邻居开始重新处理…这意味着应该检查这个特定邻居的邻居…在这种情况下,你应该在整个数组上运行这个条件以得到一个二进制结果。然后提取包含起点的连接组件(相当于进行整体填充),您可以使用:。这还允许您指定定义像素如何连接的结构元素。我将对此进行研究!您认为它是否也适用于基于成本面矩阵的“最短路径”算法?例如,这就是我使用上面代码的一个应用程序。否决票是怎么回事?OP特别关注检查的链接。如果有人认为这个答案不相关,我想知道原因。(关于如何捆绑支票,已经有了一个很好的答案,OP发现正是出于这个原因,这是不够的。)我也认为你的解决方案是合适的。我想必须写一些东西,比如两种解决方案的组合,才能使它更好地工作。。
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