如何在多维数组的每一行中找到最常出现的元素?

时间:2014-06-21 23:51:41

标签: python python-2.7

假设我有一个数组:

import numpy as np
a=np.array([[1,0,0,1,0,0,0,1],[1,1,1,1,0,0,1,1]])

如何计算具有最多值的另一个数组b?即

b=([[0],[1]])

3 个答案:

答案 0 :(得分:2)

如果您有scipy,则可以使用scipy.stats.mode

>>> a = np.array([[1,0,0,1,0,0,0,1],[1,1,1,1,0,0,1,1]])
>>> import scipy.stats
>>> most, mostcc = scipy.stats.mode(a, axis=1)
>>> most
array([[ 0.],
       [ 1.]])
>>> mostcc
array([[ 5.],
       [ 6.]])

请注意,来自文档:

  

如果有多个此类值,则仅返回第一个值。   还返回了模态箱的bin计数。

答案 1 :(得分:0)

只需循环遍历数组的每个元素,在这种情况下,每个元素都是[1,0,0,1,0,0,0,1]和[1,1,1,1,0,0,1 ,1]。

for myarr in a:

循环遍历myarr的每个元素:

for myele in myarr

使用dict跟踪发生的次数:

mydict[myele] += 1

跟踪最高值:

mymost = myele if mydict[myele] > mymost

在完成myarr后,请将结果添加到您的结果中:

mymosts.append(mymost)

答案 2 :(得分:0)

怎么样:

b = [np.bincount(x).argmax() for x in a]

或获取您显示的格式:

b = ([[np.bincount(x).argmax()] for x in a])

如果您希望使用Counter使用浮点数,那将是最好的标准库解决方案。

from collections import Counter
b = ([[Counter(x).most_common()[0][0]] for x in a])