Python 数组元素的布尔轮廓

Python 数组元素的布尔轮廓,python,numpy,boolean,Python,Numpy,Boolean,我有以下数组 array = np.array(\ [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 255], [ 0, 0, 0, 0, 0, 0, 0, 255, 255, 255], [ 0, 0, 0, 0, 0, 255, 255, 255, 255, 255], [ 0, 0, 0, 255, 255, 255, 255,

我有以下数组

array = np.array(\
       [[  0,   0,   0,   0,   0,   0,   0,   0,   0, 255],
       [   0,   0,   0,   0,   0,   0,   0, 255, 255, 255],
       [   0,   0,   0,   0,   0, 255, 255, 255, 255, 255],
       [   0,   0,   0, 255, 255, 255, 255, 255, 255, 255],
       [   0, 255, 255, 255, 255, 255, 255, 255, 255, 255]])
我想得到一个布尔数组,每当上一个元素和下一个元素不同时(或者如果它位于数组的边缘),该值为True:

到目前为止,我所尝试的: 如果下一个邻居不同,我会查找每一行:

row = np.array([np.append(row[:-1] != row[1:],False) for row in mapped_image])
对于每一列:

column = []
rowAbove = mapped_image[0]
for row in mapped_image[1:]:
    column .append(rowAbove != row)
    rowAbove = row
column .append(["True"]*len(row))

。。。但是,我很难将它们合并在一起并添加边缘。我可以试着解决这个问题吗?

IIUC,您想要屏蔽差异不为零的连续元素(边除外)。您可以查看以下内容:

diff_y = np.diff(array, append=255, axis=-2)
# True if it's on the edge of the array
diff_y[:,0] = 255
diff_y[0,:] = 255

print(diff_y != 0)
输出:

[[ True  True  True  True  True  True  True  True  True  True]
 [ True False False False False  True  True False False False]
 [ True False False  True  True False False False False False]
 [ True  True  True False False False False False False False]
 [ True False False False False False False False False False]]

这不是您想要的确切输出,但这可能会让您有所了解。

Wrt“当上下两个元素不同时,该值为真”-彼此不同还是与元素不同?在结果的最后一行中,当第一个值上面的值为0,旁边的值(右侧)为255时,第一个值为
True
。最后一行的第三个元素是
False
,但上面有0,后面有255。它们要么是真的,要么是假的。这些位置的原始值是0和255。所以,他们应该有同样的结果。顺便说一句,最上面的行和最右边的列显示的都是真的。为什么右上角和最右边的列都是假的?嗨,凯文,非常感谢你的回答!实际上,通过在数组周围添加一个255的人工边界来扩充原始数组,然后执行np.diff()并“剪切”出有用的布尔部分,您认为如何。你觉得这个方法怎么样?嗨,我想可能有用<代码>np。pad(数组[1,1],常量值=255)将创建人工边界。
[[ True  True  True  True  True  True  True  True  True  True]
 [ True False False False False  True  True False False False]
 [ True False False  True  True False False False False False]
 [ True  True  True False False False False False False False]
 [ True False False False False False False False False False]]