Внедряете numpick bincount, чтобы изменить половину наиболее распространенного значения? - PullRequest
0 голосов
/ 11 апреля 2019

Я реализую алгоритм KMeans, используя numpy.

Я делаю массив с именованными расстояниями, подобный этому:

[[ 5.  1.  1.  1.  2.  1.  3.  1.  1.  1.]
 [ 5.  4.  4.  5.  7. 10.  3.  2.  1.  0.]
 [ 3.  1.  1.  1.  2.  2.  3.  1.  1.  1.]
 [ 6.  8.  8.  1.  3.  4.  3.  7.  1.  1.]
 [ 4.  1.  1.  3.  2.  1.  3.  1.  1.  1.]
 [ 8. 10. 10.  8.  7. 10.  9.  7.  1.  0.]
 [ 1.  1.  1.  1.  2. 10.  3.  1.  1.  0.]
 [ 2.  1.  2.  1.  2.  1.  3.  1.  1.  1.]
 [ 2.  1.  1.  1.  2.  1.  1.  1.  5.  1.]
 [ 4.  2.  1.  1.  2.  1.  2.  1.  1.  1.]]

Где первые 9 столбцов являются точками данных, а последний столбец - кластером, которому назначается точка данных для случайных центроидов.

В этом массиве я хотел бы видеть эти значения, 0,1,2 в последнем столбце. Как и в приведенном выше массиве, мы видим только 0,1 в последнем столбце. В этом случае я намерен изменить половину наиболее распространенного значения с последнего столбца на 2.

k=3
for c in range(k):
    if c in distances[:, -1]:
    else:
        x = np.bincount(distances[:,-1]).argmax()
        distances[:len(distances[distances[:,-1]==x])/2,-1][distances[:,-1] == x] = c

Однако это не работает. Может кто-нибудь помочь мне решить эту проблему?

ошибка -> IndexError: логический индекс не соответствует индексированному массиву по измерению 0; размерность равна 0, но соответствующий логический размер равен 10

1 Ответ

1 голос
/ 11 апреля 2019

Я думаю, что это может помочь вам

Если distance - это переменная с массивом

x=np.unique(distance[:,-1]).argmax()
pos=np.argwhere(distance[:,-1]==x).flatten()
for i in range(int(len(pos)/2)):
    distance[i,-1]=2

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...