如何用NumPy按出现次数整理矩阵中0-5的数值?
问题:用NumPy统计矩阵中0-5数值的出现次数并整理为数组
给定3x3矩阵:
[[1 1 3] [4 5 2] [3 0 0]]
需要统计0到5每个数值的出现次数,整理为数组,期望输出:[2,2,1,2,1,1]。
尝试的代码:
import numpy as np m = np.matrix([[1,1,3], [4,5,2], [3,0,0]]) # Primary matrix, used for obtaining the values print("Original Matrix: ") # Print original matrix print(m) print("Occurrences: ") for i in range(6): occur = (np.count_nonzero(m == i)) # Count the number of elements satisfying the condition print(i, ":", occur)
当前输出:
Occurrences: 0 : 2 1 : 2 2 : 1 3 : 2 4 : 1 5 : 1
解决方案
方法1:基于现有循环改进
直接在循环中收集统计结果,再转为NumPy数组:
import numpy as np m = np.matrix([[1,1,3], [4,5,2], [3,0,0]]) counts = [] for i in range(6): counts.append(np.count_nonzero(m == i)) result = np.array(counts) print(result) # 输出: [2 2 1 2 1 1]
方法2:更高效的np.bincount方法
NumPy的np.bincount()专门用于统计非负整数数组中每个值的出现次数,是更高效的实现方式:
import numpy as np m = np.matrix([[1,1,3], [4,5,2], [3,0,0]]) # 将矩阵展平为一维数组后统计 result = np.bincount(m.flatten()) print(result) # 输出: [2 2 1 2 1 1]
说明:m.flatten()把二维矩阵转为一维数组,np.bincount()会自动统计0到数组最大值(此处为5)的每个整数出现次数,完全匹配需求。
内容的提问来源于stack exchange,提问作者Ian Aragão
相关产品推荐
相关产品推荐

