计算具有特定元素的数组的平均值

原文标题Calculate means of array with specific elements

我正在实施最近质心分类算法,但在我的情况下,我有点不知道如何使用 numpy.mean 。

所以假设我有一些球形数据集X:

[[ 0.39151059  3.48203037]
 [-0.68677876  1.45377717]
 [ 2.30803493  4.19341503]
 [ 0.50395297  2.87076658]
 [ 0.06677012  3.23265678]
 [-0.24135103  3.78044279]
 [-0.05660036  2.37695381]
 [ 0.74210998 -3.2654815 ]
 [ 0.05815341 -2.41905942]
 [ 0.72126958 -1.71081388]
 [ 1.03581142 -4.09666955]
 [ 0.23209714 -1.86675298]
 [-0.49136284 -1.55736028]
 [ 0.00654881 -2.22505305]]]

和标记的向量Y:

[0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1.]

具有 100 个 2D 数据点的示例给出以下结果:enter image description here

NCC 算法包括首先计算每个类的类均值(0 和 1:即蓝色和红色),然后为下一个数据点计算最近的类质心。

这是我目前的功能:

def mean_ncc(X,Y):
    # find unique classes
    m_cids = np.unique(Y)   #[0. 1.]
    # compute class means
    mu = np.zeros((len(cids), X.shape[1]))    #[[0. 0.] [0. 0.]] (in the case where Y has 2 unique points (0 and 1)
    for class_idx, class_label in enumerate(cids):
        mu[class_idx, :] = #problem here
    return mu

所以在这里我想要一个包含“0”(蓝色)点和“1”(红色)点的类均值的数组:如何指定要计算其均值的 X 元素的数量?我想做点什么像这样:

for class_idx, class_label in enumerate(m_cids):
       mu[class_idx, :] = np.mean(X[only the elements,that contains the same class_label], axis=0)
   

有可能还是有其他方法可以实现这一点?

原文链接:https://stackoverflow.com//questions/71979292/calculate-means-of-array-with-specific-elements

回复

我来回复
  • GregoirePelegrin的头像
    GregoirePelegrin 评论

    你可以使用这样的东西:

    import numpy as np
    
    tags = [0, 0, 1, 1, 0, 1]
    values = [5, 4, 2, 5, 9, 8]
    
    tags_np = np.array(tags)
    values_np = np.array(values)
    
    print(values_np[tags_np == 1].mean())
    

    编辑:您肯定需要更多地研究平均函数的轴参数:

    import numpy as np
    
    values = [[5, 4],
                [5, 4],
                [4, 3],
                [4, 3]]
    
    values_np = np.array(values)
    tags_np = np.array([0, 0, 1, 1])
    
    print(values_np[tags_np == 0].mean(axis=0))
    
    2年前 0条评论