gpt4 book ai didi

python - 将数据点分成簇并取每个簇的平均值

转载 作者:行者123 更新时间:2023-12-01 01:47:24 25 4
gpt4 key购买 nike

假设我在 2x4 矩阵中有一些数据(4 个数据点,2 个特征)

X = np.array([[4,3,5,6], = [x1 x2 x3 x4]
[7,4,6,5]])

“最接近”的 3x4 矩阵,指示与每个数据点 x 最接近的簇 k。 (3 个聚类,4 个数据点)

C = [[1 0 1 0]
[0 0 0 1]
[0 1 0 0]]

我想找到一种使用 numpy 计算每个簇中数据点的平均值的有效方法。

我的想法是构建一个如下所示的矩阵:

idea = [[x1 0  x3 0 ]
[0 0 0 x4]
[0 x2 0 0 ]]

对各列中的元素求和,然后除以 np.sum(c,axis=1) 中的各个元素,因为平均值应该只考虑属于该元素的数据点簇(即不是零)。

此示例的最终预期输出应该是 3x2 矩阵:

output = [(x1+x3)/2  = [ [4.5 6.5]
x4 [6 5 ]
x2 ] [3 4 ]]
  1. 我什至无法构造一个看起来像我的想法矩阵的矩阵。
  2. 我不知道这是否是解决此问题最有效的方法

我想避免使用任何 for 循环。

最佳答案

这是您的策略的矢量化实现:

X = np.array([[4, 3, 5, 6],[7, 4, 6, 5]])
C = np.array([[1, 0, 1, 0], [0, 0, 0, 1], [0, 1, 0, 0]])
output = X @ C.T / np.sum(C, axis=1)

print(output)
# => [[4.5 6. 3. ]
# [[6.5 5. 4. ]]

由于 X 中的点是列,因此我认为将输出的列作为簇的质心更自然。如果您愿意,可以转置结果。

关于python - 将数据点分成簇并取每个簇的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51121265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com