NumPy:比较两个数组中的元素

ebr*_*ert 37 python numpy

有人遇到过这个问题吗?假设您有两个如下所示的数组

a = array([1,2,3,4,5,6])
b = array([1,4,5])
Run Code Online (Sandbox Code Playgroud)

有没有办法比较b中存在的元素?例如,

c = a == b # Wishful example here
print c
array([1,4,5])
# Or even better
array([True, False, False, True, True, False])
Run Code Online (Sandbox Code Playgroud)

我试图避免循环,因为它需要数百万元素的年龄.有任何想法吗?

干杯

ete*_*teq 52

实际上,有一个比这些更简单的解决方案:

import numpy as np

a = array([1,2,3,4,5,6])
b = array([1,4,5])

c = np.in1d(a,b)
Run Code Online (Sandbox Code Playgroud)

得到的c然后是:

array([ True, False, False,  True,  True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

  • 是否有"almost_equal"版本?您可以在哪里指定用于测试相等性的条件? (6认同)
  • 现在已弃用。NumPy文档指出“对于新代码,我们建议使用`isin`而不是`in1d`。” (2认同)

unu*_*tbu 18

使用np.intersect1d.

#!/usr/bin/env python
import numpy as np
a = np.array([1,2,3,4,5,6])
b = np.array([1,4,5])
c=np.intersect1d(a,b)
print(c)
# [1 4 5]
Run Code Online (Sandbox Code Playgroud)

请注意,如果a或b具有非唯一元素,则np.intersect1d会给出错误的答案.在那种情况下使用np.intersect1d_nu.

还有np.setdiff1d,setxor1d,setmember1d和union1d.请参阅 Numpy示例列表与Doc