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

从多数组提取元素构建新数组时触发TypeError的问题求助

问题分析与解决方案

首先,咱们先拆解你遇到的TypeError: 'int' object is not subscriptable错误——这不是np.concatenate直接导致的,核心问题是变量名冲突:你一开始定义了数组c,但在循环里又用c作为循环变量(for c in range(0,2)),这就把原来的数组c覆盖成了整数(0和1),当你执行c[c][s]时,本质是在对整数c做下标操作,自然会报错。

其次,就算修复了变量名,np.concatenate在这里也用错了:a[c][s]是单个整数,而concatenate需要传入的是数组/序列的集合,它是用来拼接多个数组的,不是用来组合单个元素的。

关于stack函数的可行性

当然可以用np.stack!stack可以沿着新的轴堆叠数组/元素,非常适合你这种把多个对应位置的元素组合成新数组的场景。不过咱们先把基础问题解决掉。

修正后的代码

下面是符合你需求的代码,我会标注关键修改点:

import numpy as np

# 原数组定义保持不变
a = [[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
b = [[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
c_arr = [[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]  # 把原数组c改名为c_arr,避免和循环变量冲突
d = []

# 循环变量改用row_idx,不再用c
for row_idx in range(2):
    d.append([])
    for s in range(11):  # 原数组每个子列表有11个元素(0到10),所以范围要改成0到11,否则会漏掉最后一个元素
        # 方式1:直接用列表组合,再转成numpy数组(简单直观)
        combined = np.array([a[row_idx][s], b[row_idx][s], c_arr[row_idx][s]])
        # 方式2:用np.stack,效果一样
        # combined = np.stack([a[row_idx][s], b[row_idx][s], c_arr[row_idx][s]])
        d[row_idx].append(combined)

# 验证输出
print(d[0][0])  # 输出:[0 0 0],符合你的需求

额外优化:用列表推导式简化代码

如果想让代码更简洁,可以用嵌套列表推导式,避免多层循环:

import numpy as np

a = [[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
b = [[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
c_arr = [[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]

d = [
    [np.array([a[r][s], b[r][s], c_arr[r][s]]) for s in range(11)]
    for r in range(2)
]

print(d[0][0])  # 输出:[0 0 0]

这样就能完美实现你想要的d[0][0] = [0,0,0]的格式啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:50