匹配数组与矩阵行中的元素

时间:2016-04-04 15:46:24

标签: python arrays matching

我有一个矩阵x_faces,包含3列和N个元素(在本例中为4)。 每行我想知道它是否包含数组matches

中的任何元素
x_faces = [[   0,  43, 446],
           [   8,  43, 446],
           [   0,  10, 446],
           [   0,   5, 425]
          ]
matches = [8, 10, 44, 425, 440]

哪个应该归还:

results = [
        False,
        True,
        True,
        True
    ]

我可以想到一个执行此操作的for循环,但在python中有一种巧妙的方法吗?

3 个答案:

答案 0 :(得分:2)

您可以为此目的使用any()功能:

result = [any(x in items for x in matches) for items in x_faces]

输出:

[False, True, True, True]

答案 1 :(得分:0)

您可以使用numpy并将两个数组转换为3D并进行比较。然后我使用sum来确定最后两个轴中的任何值是否为True:

x_faces = np.array([[   0,  43, 446],
           [   8,  43, 446],
           [   0,  10, 446],
           [   0,   5, 425]
          ])
matches = np.array([8, 10, 44, 425, 440])
shape1, shape2 = x_faces.shape, matches.shape
x_faces = x_faces.reshape((shape1 + (1, )))
mathes = matches.reshape((1, 1) + shape2)
equals = (x_faces == matches)
print np.sum(np.sum(equals, axis=-1), axis=-1, dtype=bool)

答案 2 :(得分:0)

我会做类似的事情:

result = [any([n in row for n in matches]) for row in x_faces]