You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Numpy沿多轴统计元素出现次数?

基于Numpy实现沿行统计元素出现次数

需求说明

给定二维Numpy数组,需对每行统计各元素的出现次数,输出数组的列索引对应元素值,未出现的元素计数为0。

输入输出示例

输入数组:

import numpy as np
arr = np.array([[1,2,3],
                [4,5,5]])

期望输出:

np.array([[0,1,1,1,0,0],
          [0,0,0,0,1,2]])

Numpy实现方法

方法1:结合apply_along_axis与bincount

代码简洁,适合中小规模数组:

max_val = arr.max()
# 沿每行应用bincount,minlength确保覆盖所有可能的元素值
result = np.apply_along_axis(lambda x: np.bincount(x, minlength=max_val + 1), axis=1, arr=arr)
  • np.bincount用于统计非负整数的出现频次,minlength设为数组最大元素+1,保证输出列数覆盖所有可能的元素。
  • np.apply_along_axis指定axis=1,对每行单独处理。

方法2:向量化高效实现(无显式循环)

处理大规模数组时优先用这种方法,避免apply_along_axis的底层循环开销:

max_val = arr.max()
rows, cols = arr.shape

# 将行索引展平,与元素值组合成唯一编码
row_indices = np.repeat(np.arange(rows), cols)
flat_arr = arr.flatten()
encoded = row_indices * (max_val + 1) + flat_arr

# 统计编码后的频次,再重塑为目标形状
counts = np.bincount(encoded, minlength=rows * (max_val + 1))
result = counts.reshape(rows, max_val + 1)
  • 通过编码将(行号, 元素值)映射为唯一整数,用bincount一次性完成全局统计,再重塑为二维数组,效率远高于Python循环。

注意事项

如果数组包含负数,需要先对元素做偏移处理(比如加上最小绝对值),确保所有元素转为非负整数后再使用bincount。

内容的提问来源于stack exchange,提问作者Mason Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:02:08