【问题标题】:check how many elements are equal in two numpy arrays python检查两个numpy数组python中有多少元素相等
【发布时间】:2014-10-18 21:11:17
【问题描述】:

我有两个带有数字的 numpy 数组(长度相同),我想计算这两个数组之间有多少元素相等(相等 = 数组中的相同值和位置)

A = [1, 2, 3, 4]
B = [1, 2, 4, 3]

那么我希望返回值为 2(只有 1&2 在位置和值上相等)

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    使用numpy.sum

    >>> import numpy as np
    >>> a = np.array([1, 2, 3, 4])
    >>> b = np.array([1, 2, 4, 3])
    >>> np.sum(a == b)
    2
    >>> (a == b).sum()
    2
    

    【讨论】:

    • 如何扩展它以使其适用于二维数组?
    • @NicolasSchejtman 答案中的解决方案应该适用于二维数组。试试a = np.array([[1,2,0],[3,4,0]]); b = np.array([[1,9,0],[9,4,0]]); print((a == b).sum())
    • @falsetru 很有魅力。非常感谢!
    • 如果有不同的形状和不同的索引怎么办?即b = np.array([3, 2, 4, 1, 1])
    • @user5173426, np.sum(a[:min(len(a), len(b))] == b[:min(len(a), len(b))])
    【解决方案2】:

    只要保证两个数组的长度相同,就可以这样做:

    np.count_nonzero(A==B)
    

    【讨论】:

    • 这是迄今为止更快的解决方案,只要您知道数组的长度相同。
    • @AndrewGuy 如果数组的长度不同怎么办?
    • @Euler_Salter 假设您想计算具有相同值和位置的元素,我想就像s = min(len(A), len(B)); count = np.count_nonzero(A[:s] == B[:s]) 一样。
    • @Euler_Salter 啊,这是一个不同的问题(肯定有一个问题有更好的答案......)。如果它们没有重复的元素,一种简单的方法(不确定是否一定是最好的)是np.count_nonzero(np.logical_or.reduce(A[:, np.newaxis], B[np.newaxis, :], axis=0))
    • 仅作记录,如果有人收到警告:'DeprecationWarning: elementwise comparison failed;这将在未来引发错误,并且总和结果中的值为 0,请检查“a”和“b”的长度,因为它们的长度可能不同
    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2012-05-21
    • 2015-03-26
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多