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

如何使用np.concatenate拼接含CUDA tensor的列表并解决相关报错

报错原因

你遇到的报错核心是 Numpy 数组仅支持在CPU内存中存储、运算,无法直接读取GPU显存(cuda:0)上的PyTorch Tensor数据,必须先将GPU上的Tensor转移到CPU内存后才能转成Numpy格式处理。

解决方案

方案1:继续用np.concatenate完成拼接

先遍历列表,把每个Tensor先转移到CPU、转成Numpy数组后再拼接:

import numpy as np
# 假设你的Tensor列表名为X
processed_list = [t.detach().cpu().numpy() for t in X]
result = np.concatenate(processed_list)

说明:如果你的Tensor是训练过程生成、带有梯度属性(requires_grad=True),必须加.detach()将其从计算图中剥离后才能转Numpy;如果是无梯度的推理结果,可以省略.detach()。

方案2:直接用PyTorch内置拼接函数(更推荐)

如果不需要得到Numpy格式的结果,或者要保留Tensor的设备属性,可以直接用torch.cat完成拼接,不需要转Numpy,性能更高:

import torch
# 直接在GPU上完成拼接,结果仍为GPU Tensor
result_gpu = torch.cat(X, dim=0)
# 如果后续需要转Numpy再执行这一步
result_np = result_gpu.detach().cpu().numpy()

dim参数和np.concatenate的axis参数逻辑完全一致,按行拼接设为dim=0即可满足你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:39:03