Предположим, у меня есть некоторые данные в матрице 2x4 (4 точки данных, 2 функции)
X = np.array([[4,3,5,6], = [x1 x2 x3 x4]
[7,4,6,5]])
«Ближайшая» матрица 3x4, которая указывает ближайший кластер k к каждой точке данных x. (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 ]]
- Я даже не смог построить матрицу, похожую на мою
idea
матрицу.
- Я не знаю, является ли это наиболее эффективным способом решения этой проблемы
Я хочу избегать использования циклов for.