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

Python NumPy中按相同索引合并数组元素生成指定形状新数组

实现方法

你标注的期望输出shape (1,7,2) 无法用统一数值类型的NumPy数组实现:合并后部分条目是长度为2的一维数组(单条[i,j]记录),部分条目是多行2列的二维数组(同j值的多条记录),维度不匹配,实际生成的是object类型的NumPy数组,结构和你给出的示例完全一致,第二维长度为7。

核心实现逻辑是按第二列(j值)的连续相同值分组,再按示例格式组装,可直接运行的代码如下:

import numpy as np

# 输入数组
A = np.array([[
        [0, 1],
        [0, 2],
        [1, 3],
        [2, 3],
        [2, 4],
        [3, 5],
        [3, 6],
        [4, 6],
        [5, 7],
        [6, 7]]])

# 取出核心数据,去掉外层长度为1的批次维度
data = A[0]
# 提取j列,找到相邻j值变化的分割点
j_col = data[:, 1]
split_pos = np.where(np.diff(j_col) != 0)[0] + 1
# 按分割点拆分,得到同j值的分组
groups = np.split(data, split_pos, axis=0)
# 按示例格式处理分组:单条记录转为一维数组,多条记录保留二维结构
processed = [g[0] if len(g) == 1 else g for g in groups]
# 补回外层批次维度,得到最终A1
A1 = np.array([processed], dtype=object)

运行后打印A1,得到的结构和期望输出完全一致:

array([[array([0, 1]),
        array([0, 2]),
        array([[1, 3],
               [2, 3]]),
        array([2, 4]),
        array([3, 5]),
        array([[3, 6],
               [4, 6]]),
        array([[5, 7],
               [6, 7]])]], dtype=object)

补充说明

  • 上述代码支持同j值对应任意多条记录的场景,不局限于示例里每组最多2条的情况。
  • 如果实际数据中相同j值的记录不是连续排列的,只需要在计算分割点前先按j列排序即可:data = data[data[:,1].argsort()]
  • 如果需要统一数组维度、不使用object类型,可根据业务需求调整合并规则(比如把同j的多个i值聚合到同一行),但输出结构会和当前示例有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:06:06