计算具有特定元素的数组的平均值
machine-learning 368
原文标题 :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 算法包括首先计算每个类的类均值(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)
有可能还是有其他方法可以实现这一点?
回复
我来回复-
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年前