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

如何将NumPy数组拆分为相同元素组成的子数组?

实现连续相同元素的数组拆分

这里提供两种实用的实现方式,满足你的需求:

方法一:纯NumPy原生实现(适合处理大型数组)

利用NumPy的数组操作定位分割点,效率更高:

import numpy as np

def stackoverflowgeniusfunc(arr):
    # 定位连续元素发生变化的位置
    split_indices = np.where(arr[1:] != arr[:-1])[0] + 1
    # 拆分原数组
    sub_arrays = np.split(arr, split_indices)
    # 转换为列表格式(若保留NumPy子数组可去掉此步)
    return [sub.tolist() for sub in sub_arrays]

# 测试示例
A = np.array([1,2,2,2,3,3,1,1,1,4,4,4,4,4,5,5])
B = stackoverflowgeniusfunc(A)
print(B)
# 输出:[[1], [2, 2, 2], [3, 3], [1, 1, 1], [4, 4, 4, 4, 4], [5, 5]]

方法二:使用itertools.groupby(代码更简洁)

借助Python标准库的groupby工具,快速对连续相同元素分组:

from itertools import groupby
import numpy as np

def stackoverflowgeniusfunc(arr):
    # groupby会自动聚合连续相同元素,直接转为列表即可
    return [list(group) for _, group in groupby(arr)]

# 测试示例
A = np.array([1,2,2,2,3,3,1,1,1,4,4,4,4,4,5,5])
B = stackoverflowgeniusfunc(A)
print(B)
# 输出:[[1], [2, 2, 2], [3, 3], [1, 1, 1], [4, 4, 4, 4, 4], [5, 5]]

两种方法对比

  • 纯NumPy方法:更适合处理大规模数组,计算效率优于迭代器方式
  • groupby方法:代码更简洁,无需复杂的数组操作,同时支持普通Python列表输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:58:14