Самый частый элемент в массиве NumPy ND - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь найти и напечатать наиболее распространенное число в матрице, используя numpy, если это возможно.

Этот список был дан (сделал его матрицей, используя numpy.matrix (list)):

import numpy as np
list = [[2,4,1,6,3], [2,4,1,8,4], [6,5,4,3,2], [6,5,4,3,4], [1,2,3,4,5]]
matrix=np.matrix(list)

для этого примера я должен получить: 4 (так как это наиболее распространенное число)

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Дано:

>>> import numpy as np
>>> LoL = [[2,4,1,6,3], [2,4,1,8,4], [6,5,4,3,2], [6,5,4,3,4], [1,2,3,4,5]]
>>> matrix=np.array(LoL)
>>> matrix
[[2 4 1 6 3]
 [2 4 1 8 4]
 [6 5 4 3 2]
 [6 5 4 3 4]
 [1 2 3 4 5]]

Вы можете сделать:

>>> np.argmax(np.bincount(matrix.flat))
4

Или,

u, c = np.unique(your_lst, return_counts=True)
u[c.argmax()]
# 4

Если вы хотите сделать это без numpy илиПри любом импорте для подсчета самой частой записи в списке списков вы можете использовать словарь для подсчета каждого элемента из генератора, который выравнивает ваш список списков:

cnts={}
for e in (x for sl in LoL for x in sl):
    cnts[e]=cnts.get(e, 0)+1

Затем сортируйте по наиболее частым:

>>> sorted(cnts.items(), key=lambda t: t[1], reverse=True)
[(4, 7), (2, 4), (3, 4), (1, 3), (5, 3), (6, 3), (8, 1)]

Или просто используйте max, если вы хотите только самое большое:

>>> max(cnts.items(), key=lambda t: t[1])
0 голосов
/ 27 декабря 2018

Вам не нужна промежуточная матрица.Вы можете напрямую сгладить свой список, чтобы получить единый список и использовать bincount .Возвращает список, в котором частота каждого числа указана в позиции индекса, соответствующей номеру.Вот почему вы используете argmax, чтобы получить соответствующий индекс

import numpy as np
listt = [[2,4,1,6,3], [2,4,1,8,4], [6,5,4,3,2], [6,5,4,3,4], [1,2,3,4,5]]
flat = [i for j in listt for i in j]
counts = np.bincount(flat)
print (np.argmax(counts))
# 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...