使用Numpy按行统计1-10各值出现次数并生成指定格式计数数组
Numpy按行统计1~10数值出现次数的实现方法
你可以通过以下两种方式修改代码实现需求:
方案1:基于原有循环逻辑修改
保留你原来的np.unique实现逻辑,新增初始化全零结果数组,把每行的计数填充到对应数值的位置即可:
import numpy as np np.random.seed(100) arr = np.random.randint(1,11,size=(6, 10)) row, col = arr.shape # 初始化6行10列的全零结果数组 res = np.zeros((row, 10), dtype=int) for i in range(row): a, c = np.unique(arr[i], return_counts=True) # 数值x对应索引为x-1,将计数写入对应位置 res[i, a-1] = c print(res)
方案2:使用np.bincount简化实现
利用np.bincount专门统计整数出现次数的特性,配合np.apply_along_axis实现更简洁的向量化运算,性能更高:
import numpy as np np.random.seed(100) arr = np.random.randint(1,11,size=(6, 10)) # bincount默认统计从0开始的整数计数,minlength=11保证覆盖0~10的范围,取[1:]切片对应1~10的计数 res = np.apply_along_axis(lambda x: np.bincount(x, minlength=11)[1:], axis=1, arr=arr) print(res)
两种方案的输出均为你需要的6行10列计数数组:
[[1 0 2 1 1 1 0 2 2 0] [2 1 3 0 1 0 1 0 1 1] [0 3 0 2 3 1 0 1 0 0] [1 0 2 1 0 1 0 2 1 2] [2 2 2 0 0 1 1 1 1 0] [1 1 1 1 1 2 0 0 2 1]]
内容的提问来源于stack exchange,提问作者Ahmed Mujtaba Jalil
相关产品推荐
相关产品推荐

