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
相关产品推荐
相关产品推荐

