匹配数组与矩阵行中的元素
Matching array with elements in rows of matrix
我有一个包含 3 列和 N 个元素的矩阵 x_faces
(在本例中为 4)。
每行我想知道它是否包含数组 matches
中的任何元素
x_faces = [[ 0, 43, 446],
[ 8, 43, 446],
[ 0, 10, 446],
[ 0, 5, 425]
]
matches = [8, 10, 44, 425, 440]
哪个应该return这个:
results = [
False,
True,
True,
True
]
我可以想到执行此操作的 for 循环,但在 python 中是否有一种巧妙的方法来执行此操作?
您可以为此目的使用 any()
函数:
result = [any(x in items for x in matches) for items in x_faces]
输出:
[False, True, True, True]
您可以使用 numpy 并将两个数组转换为 3D 并进行比较。然后我使用 sum 来确定最后两个轴中的任何值是否为真:
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)
我会做类似的事情:
result = [any([n in row for n in matches]) for row in x_faces]
我有一个包含 3 列和 N 个元素的矩阵 x_faces
(在本例中为 4)。
每行我想知道它是否包含数组 matches
x_faces = [[ 0, 43, 446],
[ 8, 43, 446],
[ 0, 10, 446],
[ 0, 5, 425]
]
matches = [8, 10, 44, 425, 440]
哪个应该return这个:
results = [
False,
True,
True,
True
]
我可以想到执行此操作的 for 循环,但在 python 中是否有一种巧妙的方法来执行此操作?
您可以为此目的使用 any()
函数:
result = [any(x in items for x in matches) for items in x_faces]
输出:
[False, True, True, True]
您可以使用 numpy 并将两个数组转换为 3D 并进行比较。然后我使用 sum 来确定最后两个轴中的任何值是否为真:
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)
我会做类似的事情:
result = [any([n in row for n in matches]) for row in x_faces]