【问题标题】:Comparing two Numpy Arrays比较两个 Numpy 数组
【发布时间】:2019-08-02 14:25:33
【问题描述】:

假设我有两个 Numpy 数组 A 和 B,我想查找是否是 sorted(A) == sorted(B)?例如:如果 A = [5,3,2,4]B = [3,2,5,4],那么我必须得到 TRUE。最快的方法是什么?

【问题讨论】:

  • set(A) == set(B)
  • 如果列表具有必须匹配的重复值,则设置不起作用。
  • 是的,@MikeSperry 假设如果 A = [1,1,2,3]B = [3,1,2],那么 set(A)==set(B) 将返回 TRUE,但答案实际上是 False。 @Lamanus
  • 在您的情况下,sorted(A) == sorted(B) 有什么问题?你能告诉我们更多关于你的限制吗?
  • numpy.unique(a) == numpy.unique(b) 怎么样

标签: python-3.x


【解决方案1】:

集合中的计数器怎么样

>>> import collections
>>> a = collections.Counter([1,1,2,3])
>>> b = collections.Counter([3,1,2])
>>> a == b
False

>>> a = collections.Counter([1,1,2,3])
>>> b = collections.Counter([3,1,2,1])
>>> a == b
True

每个列表的构造发生在 O(n) 时间内

edit:如果有人不熟悉计数器的作用。它遍历列表并创建本质上是值到该值出现次数的字典映射。
因此,一旦我们创建了 a = {'1': 2, '2': 1...} 形式的这些字典,这需要 O(n) 时间,我们就可以比较这两个字典也需要 O(n) 时间。

【讨论】:

    【解决方案2】:

    在这种情况下,添加括号的效果非常快:

    A = [5,3,2,4]
    B = [3,2,5,4]
    print((sorted(A) == sorted(B)))
    

    产量:

    True
    

    【讨论】:

    • 如果前任有骗子,A = [1,1,2,3] 和 B = [1,2,3] 就不一样了。
    【解决方案3】:

    试试这个。如果ab

    a = np.array([1,2,3,3,2,3,4])
    b = np.array([1,2,3,4])
    

    那么,

    np.array_equal(np.unique(a), np.unique(b))
    True
    

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2017-01-18
      • 1970-01-01
      • 2019-07-04
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      相关资源
      最近更新 更多