确定特定的有序向量是否在列表/数组中

时间:2017-03-04 00:39:37

标签: python numpy

我正在使用Python研究一些分子动力学,并且数组往往变得非常大。快速检查某些向量是否出现在数组中会很有帮助。 在寻找方法之后,我惊讶地发现这个问题似乎没有出现。 特别是, 如果我有类似

的东西
import numpy as np
y = [[1,2,3], [1,3,2]]
x = np.array([[1,2,3],[3,2,1],[2,3,1],[10,5,6]])

我想知道y中的特定向量是否存在于x(不仅仅是元素)中,我该怎么做? 使用像

这样的东西
for i in  y:
    if i in x:
        print(i)

将简单地返回包含至少一个i元素的每个y数组向量。 想法?

3 个答案:

答案 0 :(得分:1)

如果要检查数组中是否存在y中的所有向量,可以尝试:

import numpy as np
y = [[1,2,3], [1,3,2]]
x = np.array([[1,2,3],[3,2,1],[2,3,1],[10,5,6]])

all(True if i in x else False for i in y)
# True

答案 1 :(得分:0)

你没有明确地给出你期望的输出,但我推断你只想看到[1,2,3]作为该程序的输出。

如果你只是将x作为另一个列表而不是NumPy数组,那么你得到那个输出。

答案 2 :(得分:0)

最佳策略取决于尺寸和数量。快速解决方案是

[np.where(np.all(x==row, axis=-1))[0] for row in y]
# [array([0]), array([], dtype=int64)]

结果列表为y中的每一行提供x行中可能为空的位置数组。