使用python测试来自一个1-d数组的每个元素是否存在于另一个2-d数组的相应行中的最有效方法

时间:2017-09-27 13:53:32

标签: python numpy

我想知道测试一个1-d数组中的每个元素是否存在于另一个二维数组的相应行中的最有效方法,使用python

具体来说,我有两个数组。第一个是1-d整数数组。第二个是2-d整数数组。

示例输入:

[1, 4, 12, 9] # array 1

[[1, 12, 299],
 [2, 5, 11],
 [1, 3, 11],
 [0, 1, 9]] # array 2

预期产出:

[True, False, False, True]

2 个答案:

答案 0 :(得分:1)

您可以将a重塑为2d数组,与b进行比较,然后检查每行中是否有True

np.equal(np.reshape(a, (-1,1)), b).any(axis=1)
a = [1, 4, 12, 9] # array 1
​
b = [[1, 12, 299],
     [2, 5, 11],
     [1, 3, 11],
     [0, 1, 9]] 

np.equal(np.reshape(a, (-1,1)), b).any(1)
# array([ True, False, False,  True], dtype=bool)

答案 1 :(得分:0)

这是解决您问题的一个相当pythonic的解决方案。请注意,这对于numpy数组和标准列表几乎完全相同。对于巨大的numpy数组绝对不是最有效的解决方案,但我怀疑这将是任何类型的性能瓶颈,并且追求过早优化而不是可读性是一个重大的罪恶。

a = [1, 4, 12, 9]
b = [
    [1, 12, 299],
    [2, 5, 11],
    [1, 3, 11],
    [0, 1, 9]
    ]

c = [x in y for x, y in zip(a,b)]