【问题标题】:Python how to find first duplicated items in an numpy arrayPython如何在numpy数组中查找第一个重复项
【发布时间】:2021-02-26 06:32:28
【问题描述】:

我希望在数组中找到第一个重复项时遇到了问题。
例如:

array = [a, b, c, b, b, a, c, a]

returns: [True, True, True, False, False, False, False, False]  

我尝试使用 np.unique 函数,但它要么返回唯一值,要么返回唯一值的索引。
有没有什么功能可以做到这一点?

【问题讨论】:

  • 您真正希望代码做什么?你的预期输出是什么
  • 这能回答你的问题吗? Determining duplicate values in an array
  • 要不要用pandas,一个Series有.duplicated()函数。
  • @ChaddRobertson - 我认为这不是完全重复的。只有方法和第一步是相同的。问题中已经提到他在这一点上被卡住了。

标签: python python-3.x numpy


【解决方案1】:

如果可以使用pandas,则有一个名为duplicated() 的便捷函数可用于系列。

本质上,只需将 numpy 数组包装在 Series 构造函数中,调用(取反)函数并将布尔数组作为 numpy 数组返回。

例子:

a = np.array(['a', 'b', 'c', 'b', 'b', 'a', 'c', 'd', 'a'])

(~pd.Series(a).duplicated(keep='first')).to_numpy()

输出:

array([ True, True, True, False, False, False, False, True, False])

【讨论】:

    【解决方案2】:

    您对np.unique 的态度很好。使用return_index返回您需要的信息。

    我扩充了您的示例,以表明这通常独立于唯一值的位置。

    array = np.array(['a', 'b', 'c', 'b', 'b', 'a', 'c', 'd', 'a'])
    
    _, i = np.unique(array, return_index=True)
    res = np.zeros_like(array, dtype=bool)
    res[i] = True
    print(res)
    

    输出:

    [ True  True  True False False False False  True False]
    

    【讨论】:

    • 谢谢!!这比我原来的方法快 100 倍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2020-07-29
    • 2023-03-10
    • 2015-01-11
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多