【问题标题】:Determine if there are repeating numbers in a matrix (Python NumPy)确定矩阵中是否存在重复数字(Python NumPy)
【发布时间】:2021-03-15 13:27:44
【问题描述】:

在 NumPy 中,如果我有矩阵:

[2 4 3
 2 8 5
 7 6 9]

数字二出现了两次。如果是这样,我该如何检查并返回一个布尔值表示 true?

更新:如果矩阵是

[2 0 3
 1 5 0
 9 6 7]

我如何做到这一点,以便忽略零。这里有两个零,但我们不关心它们,只希望在非零数字重复时返回 true。

【问题讨论】:

    标签: python arrays numpy matrix


    【解决方案1】:

    您可以使用带有返回计数的 np.unique,如下所示:

    c = np.unique(array, return_counts=True)
    (c[1]-1).any()
    

    如果数组中存在任何重复,则返回 true。您从中减去 1,以便它不包括仅出现一次的值。如果您想忽略零,您可以将该语句更改为此

    c = np.unique(array[array != 0], return_counts=True)
    (c[1]-1).any()
    

    【讨论】:

    • 我更新了这个问题,你将如何实现这个新功能?
    【解决方案2】:

    使用 np.unique(),

    import numpy as np
    
    def hasRepeated(arr):
        elements, counts = np.unique(arr, return_counts=True)
        if np.any(counts != 1): return True
        return False
        
        
    arr = np.array(
        [[2,4,3],
        [2,8,5],
        [7,6,9]]
    )
    
    print(hasRepeated(arr)) #True
    

    【讨论】:

    • 我更新了这个问题,你将如何实现这个新功能?
    【解决方案3】:

    这是一种方法:

    a = np.matrix([[1, 2],[2, 4]])
    #convert matrix to list
    a = a.tolist()
    l = [value for sublist in a for value in sublist]
    #use Counter for list, it gives a dictionary stating which element appeared how many times
    from collections import Counter
    C = Counter(l)
    for val in C.values():
        if val > 1:
            print('True')
            break
    

    对于编辑,将代码的最后四行更改为:

    for key,val in C.items():
        if key != 0 and val > 1:
            print('True')
            break
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2016-07-23
      • 2013-04-22
      • 2011-02-20
      相关资源
      最近更新 更多