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

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 数据点的示例给出以下结果:

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

这是我当前的功能:

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

所以在这里我想要一个包含 class 表示“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)
   

是否有可能或有其他方法来实现它?

你可以使用这样的东西:

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))