返回矩阵/数组的最常见值(众数)

4

简单问题:如何获取矩阵中最常见的值?

矩阵是一种专门的二维数组,在操作中保留其二维性质。

这是我整个实现的一部分,所以我决定只展示与我的主要问题有关的重要部分:

import numpy as np
...
from src.labelHandler import LabelHandler
from collections import Counter

def viewData(filePathList, labelHandler=None):
...
    c = Counter(a)       #(1)
    print(c)             #(2)
    b = np.argmax(c)     #(3)
    print(b)             #(4)
...

输出结果将会是:
{0.3: [(0, 0, 0), (0, 10, 0), (0, 11, 0), ...], 0.2: [(0, 18, 0), ...]}
Counter({0.3: 7435, 0.2: 6633, ...})
0

这是我整个输出的一部分。
重要的是最后一行是0。 问题似乎在第3行。
b = np.argmax(c)

它只打印出了我的最大值所在的位置,即索引0。 但我想要获取浮点数本身而不是索引。

我该如何解决这个问题呢?

提前感谢您的帮助!


2
既然您已经在使用Counter,为什么不直接使用c.most_common(1)呢? - Blownhither Ma
https://dev59.com/Y2Qo5IYBdhLWcg3wE8G2 - John Zwinck
谢谢@Blownhither Ma,它完美地工作了! - user2379123
1个回答

3
你可以使用 scipy.statsnp.array.ravel() 一起来将数组压平。这样既可以得到众数,也可以得到它的数量。
import numpy as np
from scipy import stats

A = np.random.randint(0, 9, (10, 10))

res = stats.mode(A.ravel())

# ModeResult(mode=array([4]), count=array([19]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接