Применить большинство голосов к массиву Numpy (ключ, значение) - PullRequest
0 голосов
/ 08 октября 2019

У меня есть массив Numpy, где первый столбец - это идентификатор, а второй - классификация. Я хотел бы применить большинство голосов, чтобы каждый ID имел только 1 классификацию. Когда частота классификации составляет 50-50, я бы хотел выбрать классификацию случайным образом.

Мой массив выглядит следующим образом:

>>> print(myArray)
array([
[10, 0],
[10, 1],
[101, 0],
[101, 0],
[101, 2],
[102, 0],
[102, 0],
[103, 0],
[103, 1],
[103, 1]])

Я хочу, чтобы он стал таким (на основе голосования большинства)

>>> print(myArray)
array([
[10, 0],
[101, 0],
[102, 0],
[103, 1]])

или

>>> print(myArray)
array([
[10, 1],
[101, 0],
[102, 0],
[103, 1]])

1 Ответ

0 голосов
/ 08 октября 2019

Одним из подходов может быть преобразование массива numpy в defaultdict, а затем преобразование обратно в массив numpy

In [1]: from collections import defaultdict

In [2]: import numpy as np

In [3]: arr = np.array([[10, 0], [10, 1], [10, 1]])

In [4]: arr
Out[4]:
array([[10,  0],
       [10,  1],
       [10,  1]])

In [11]: darr = defaultdict(list)

In [12]: for item in arr:
    ...:     a,b = item
    ...:     darr[a].append(b)
    ...:

In [13]: darr
Out[13]: defaultdict(list, {10: [0, 1, 1]})

Так что после преобразования в dict по умолчанию вы можете выполнить итерацию dict и выбрать любое значение, которое вам нужно длякаждый ключ.

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