【问题标题】:Get amount of unique elements in numpy获取numpy中唯一元素的数量
【发布时间】:2021-11-16 12:21:26
【问题描述】:

我有一个数组
arr = np.array([[1,1,2], [1,2,3]]).
我想获取每行的唯一元素数量并计算平均值
我可以做到这一点np.array([len(np.unique(row)) for row in arr]).mean()
但似乎,这是一个缓慢的方式。还有其他更快的方法吗?

【问题讨论】:

  • 由于unique 将为每一行返回不同长度的数组,这可能是最好的。

标签: python numpy unique


【解决方案1】:

您可以使用以下内容:

import numpy as np

arr = np.array([[1, 1, 2], [1, 2, 3]])


mean = np.apply_along_axis(lambda row: len(set(row)), axis=1, arr=arr).mean()
>> mean = 2.5

【讨论】:

  • apply... 通常比简单循环慢。
【解决方案2】:

set(arr.flatten()) 将创建您想要的结果。不知道它有多快。

输出:
{1, 2, 3}

编辑:
你想要唯一元素的数量,所以你把整个东西包裹在len()

【讨论】:

    【解决方案3】:

    据我所知,这是一种最快的方法。

    import numpy as np
    import pandas as pd
    
    # Number of unique elements row wise then mean
    def unique(x):
        df = pd.DataFrame(x.T)
        return df.nunique().mean()
    
    arr = np.array([[1,1,2], [1,2,3]])
    
    print(unique(arr))
    

    输出:

    2.5
    

    【讨论】:

    • 也许重新考虑重新管理您的功能?它可能会与名为 pandas 的包混淆?
    • @BrunoLubascher 已完成,谢谢。
    • 在大矩阵上的方法要慢得多
    猜你喜欢
    • 2018-03-16
    • 2021-02-14
    • 2017-04-22
    • 2022-01-07
    • 2023-03-24
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多