Python 如何在多维数组的每一行中找到最常出现的元素?
假设我有一个数组:Python 如何在多维数组的每一行中找到最常出现的元素?,python,python-2.7,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]]) 只需循环遍历数组的每个元素,在这种情况下,每个元素是[1,0,0,1,0,0,1]和[1,1,1,0,0,1,1] for myarr in a: 循环通过myarr的每个元素: for myele in myarr 使用dict记录发生的次数: mydict[mye
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]])
只需循环遍历数组的每个元素,在这种情况下,每个元素是[1,0,0,1,0,0,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后,将mymost附加到结果中:
mymosts.append(mymost)
那么:
b = [np.bincount(x).argmax() for x in a]
或者获取您正在显示的格式:
b = ([[np.bincount(x).argmax()] for x in a])
如果您希望使用计数器处理浮动,那么使用计数器将是最佳的标准库解决方案
from collections import Counter
b = ([[Counter(x).most_common()[0][0]] for x in a])
如果有可用的scipy,则可以使用scipy.stats.mode:
注意,从文档中:
如果有多个这样的值,则只返回第一个值。
还将返回模式存储箱的存储箱计数
谢谢你,尤金。。但是我正在工作的阵列非常大。。。我用这个例子来解释我的问题,这是如何改变方法的?你的记忆有限吗?你想要一个快速算法吗?在这种情况下它是有效的。但对于更大的数组,它显示-TypeError:无法根据规则“safe”@user3718501将数组数据从dtype“float64”强制转换为dtype“int64”,这是因为np.bincount用于非负整数数组。。。就像你在问题中提到的那样。
>>> 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.]])