我正在尝试查找并打印矩阵中最常见的数字,并尽可能使用numpy。
给出此列表(使用numpy.matrix(list)将其制成矩阵):
-rw-r--r-- 35 30067 10224 <-- 2018-09
-rw-r--r-- 36 30067 10224 <-- 2018-09
-rw-r--r-- 65 30067 10224 <-- 2018-10-24
在这个例子中我应该得到:4 (因为它是最常见的数字)
答案 0 :(得分:3)
给出:
>>> 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])
答案 1 :(得分:1)
您不需要中间矩阵。您可以直接拼合列表以获得单个列表,然后使用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