总结:我正在寻找像'numpy.nonzero'这样的东西,但有一点扭曲。我想搜索包含第三维中非零的任何元素的所有索引。如果存在任何元素,请给我该维度的索引。
详细信息:我的项目涉及接收,解析,然后输出修改后的图像文件。它首先将图像转换为3D numpy数组。使用该文件创建一个掩码。接下来,它使用'numpy.bitwise_and'来查找掩码的位模式与源图像重叠的位置,然后根据这些索引执行操作。
mask = create_mask(self.image) # spare array, same size as self.image
overlap = np.bitwise_and(self.image, mask)
indices = []
for y, row in enumerate(overlap):
for x, col in enumerate(row):
if any(col): # any RGB values are not 0
indices.append((y,x))
for (y, x) in indices:
pass # do stuff
解决此问题的最佳方法是什么?我确信这比上面显示的天真方法更好。
答案 0 :(得分:1)
一种NumPythonic方式是在最后一个轴上使用.any
,即.any(axis=-1)
或简单.any(-1)
,然后使用np.argwhere
获取相应的有效索引,如下所示 -
indices = np.argwhere(overlap.any(-1))
请注意,indices
将是NumPy数组。