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

Python:统计NumPy一维数组中各值的最大连续出现次数

统计NumPy数组中每个值的最大连续出现次数

给定一维NumPy数组,需要统计数组中每个特定值的最大连续出现次数,返回一个二维数组:第一列为数组中的所有唯一数值,第二列为对应数值的最大连续出现次数。

示例输入:

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

示例输出:

result = np.array([[1,3],[2,2],[3,1],[4,5]])

实现代码

import numpy as np

def max_consecutive_count(arr):
    # 计算元素变化的分界点(添加首尾哨兵确保完整识别所有连续段)
    diff = np.diff(arr, prepend=[arr[0]-1], append=[arr[-1]+1])
    change_indices = np.where(diff != 0)[0]
    
    # 获取每个连续段的长度和对应的数值
    segment_lengths = np.diff(change_indices)
    segment_values = arr[change_indices[:-1]]
    
    # 遍历所有唯一值,提取对应最大连续长度
    unique_values = np.unique(arr)
    max_lengths = [segment_lengths[segment_values == val].max() for val in unique_values]
    
    # 组合成目标二维数组
    return np.column_stack((unique_values, max_lengths))

# 测试示例
arr = np.array([1,1,1,2,2,3,4,4,4,4,4,2,4,4])
result = max_consecutive_count(arr)
print(result)

代码说明

  1. 识别连续段分界点:通过np.diff计算相邻元素的差异,添加首尾哨兵值(与原数组首尾元素不同),确保首尾的连续段也能被完整检测到。
  2. 计算连续段长度:对分界点索引取差值,得到每个连续段的元素个数。
  3. 匹配段与数值:每个分界点的前一个位置对应连续段的起始数值,以此得到所有连续段的数值列表。
  4. 提取最大长度:针对每个唯一值,筛选出其对应的所有连续段长度,取最大值。
  5. 组合结果:用np.column_stack将唯一值和对应最大长度拼接成二维数组。

该方法基于NumPy向量化操作,比Python循环更高效,适合处理大规模数组。

内容的提问来源于stack exchange,提问作者xc-2021

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:06:02