numpy.equal与嵌套列表

时间:2012-12-07 18:51:36

标签: python numpy python-imaging-library

我想要搜索图片中的矩形。图片来自PIL。这意味着我将获得一个二维数组,其中每个项目都是一个列表,其中包含三个颜色条目。

要获得搜索颜色的矩形,我正在使用np.equal。这是一个缩小的例子:

>>> l = np.array([[1,1], [2,1], [2,2], [1,0]])
>>> np.equal(l, [2,1])  # where [2,1] is the searched color
array([[False,  True],
   [ True,  True],
   [ True, False],
   [False, False]], dtype=bool)

但我期待:

array([False, True, False, False], dtype=bool)

array([[False,  False],
   [ True,  True],
   [ False, False],
   [False, False]], dtype=bool)

如何与numpy实现嵌套列表比较?

注意:然后我想要从np.where的结果中用np.equal提取矩形的索引。

1 个答案:

答案 0 :(得分:4)

您可以沿第二轴使用all方法:

>>> result = numpy.array([[1, 1], [2, 1], [2, 2], [1, 0]]) == [2, 1]
>>> result.all(axis=1)
array([False,  True, False, False], dtype=bool)

获得指数:

>>> result.all(axis=1).nonzero()
(array([1]),)

我更喜欢nonzerowhere,因为where执行two very different things取决于传递给它的参数数量。当我需要其独特的功能时,我会使用where;当我需要nonzero的行为时,我会明确使用nonzero