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

Python中拼接多形状数组列表报错,求实现预期输出的方法

问题:拼接不同形状的NumPy数组列表报错

我有一个包含多个不同形状NumPy数组的列表A,希望将这些数组拼接成一个包含多个列表的单一数组,但运行代码时出现错误。

原代码

import numpy as np
arB=[]

A=[np.array([[ 42,  63],
[ 84,  95],
[118, 129],
[129, 140],
[140, 151],
[185, 196],
[196, 207],
[208, 219]]),np.array([[ 21,  42],
[ 63,  84],
[ 95, 106],
[106, 117],
[117, 118],
[207, 208]])]

for i in range(0,len(A)):
    for j in range(0,len(A[i])):
        for k in range(0,2):
            B=A[i,j,k]
            arB.append(B)
            B=np.array(arB)
print([B])

报错信息

in <module>
    B=A[i,j,k]

TypeError: list indices must be integers or slices, not tuple

预期输出

array([[42,  63, 84,  95, 118, 129, 129, 140, 140, 151, 185, 196, 196, 207, 208, 219],
       [21,  42, 63,  84, 95, 106, 106, 117, 117, 118, 207, 208]])

解决方案

错误原因

A是Python普通列表,不是NumPy数组,不能使用A[i,j,k]这种元组式索引。必须先通过A[i]取出列表中的NumPy数组元素,再对该数组进行多维索引。此外,原循环逻辑会把所有元素平铺成一维,不符合预期的二维数组结构。

修正代码

直接利用NumPy的flatten()方法将每个子数组展平为一维,再组合成最终数组:

import numpy as np

A = [np.array([[ 42,  63],
               [ 84,  95],
               [118, 129],
               [129, 140],
               [140, 151],
               [185, 196],
               [196, 207],
               [208, 219]]),
     np.array([[ 21,  42],
               [ 63,  84],
               [ 95, 106],
               [106, 117],
               [117, 118],
               [207, 208]])]

# 遍历每个子数组,展平后组合成新数组
result = np.array([arr.flatten() for arr in A])
print(result)

说明

  • arr.flatten()会将二维的NumPy数组转换为一维数组,保留元素顺序。
  • 列表推导式遍历A中的所有子数组,生成一维数组的列表。
  • np.array()将该列表转换为二维NumPy数组,结构与预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:55:18