Проверьте, встречается ли определенное значение несколько раз в массиве numpy - PullRequest
0 голосов
/ 10 ноября 2018

Я работаю над простым алгоритмом KNN, в котором я хочу добавить оператор if, который разрешает связь (если имеется равное количество соседей из нескольких разных классов вокруг контрольной точки). Проблема возникает, когда я хочу узнать, встречается ли максимальное значение массива более одного раза, но я не могу найти функцию, которая делает это. Что я хочу:

unique, counts = np.unique(k_nearest_labels, return_counts=True)

if (len(unique)>1) and (frequency of max(counts) in counts > 1)
    return the nearest of the tied points

Где counts - частота чисел в unique. Как мне решить второе условие if iftentent? Или есть другое решение, которое я пропускаю.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Я решил это, забыл, что могу создать логический массив и взять сумму, вот мое решение для людей, которые наткнулись на это.

 if (len(unique)>1) and (frequency of max(counts) in counts > 1)

можно записать как:

 if (len(unique)>1) and (np.sum(counts == np.max(counts)) > 1):
0 голосов
/ 10 ноября 2018

Вы можете на самом деле пропустить использование np.unique (что довольно вычислительно дорого) и все равно получить то, что вы хотите:

maxcount = (k_nearest_labels == k_nearest_labels.max()).sum()
if k_nearest_labels.size > maxcount and maxcount > 1:
    ...do stuff...

Также: даааа! Вы ответили на свой вопрос, когда писали его. Это всегда весело. Вам определенно следует принять предложение Хемерсона и разделить вашу правку с ответом на правильный ответ (его будет легче найти другим).

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