数组元素的布尔轮廓
Boolean Contour of Array Elements
我有以下数组
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:
[[ True True True True True True True True True False]
[ 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]]
目前我尝试过的:
如果下一个邻居不同,我会查找每一行:
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,您想屏蔽差异不为零的连续元素(边缘除外)。你可以看看 np.diff
这个:
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]]
这不是您想要的确切输出,但这可能会给您一些想法。
我有以下数组
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:
[[ True True True True True True True True True False]
[ 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]]
目前我尝试过的: 如果下一个邻居不同,我会查找每一行:
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,您想屏蔽差异不为零的连续元素(边缘除外)。你可以看看 np.diff
这个:
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]]
这不是您想要的确切输出,但这可能会给您一些想法。