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

未知张量维度时如何拼接?及程序化实现指定张量维度截取

未知维度张量的拼接方法

在PyTorch、TensorFlow或NumPy这类张量框架中,不管张量维度是多少,只要待拼接的张量在除指定拼接维度外的所有维度上形状完全一致,就可以用框架自带的拼接函数实现:

  • PyTorch用torch.cat([张量1, 张量2, ...], dim=拼接维度索引)
  • TensorFlow用tf.concat([张量1, 张量2, ...], axis=拼接维度索引)
  • NumPy用np.concatenate([张量1, 张量2, ...], axis=拼接维度索引)

如果不确定具体维度索引,可利用负索引简化操作——比如想在倒数第一维拼接,直接用dim=-1(PyTorch)或axis=-1(全框架通用)即可,示例代码(PyTorch):

import torch
# 假设a、b是任意维度张量,除最后一维外形状匹配
a = torch.randn(5, 10, 20)
b = torch.randn(5, 10, 30)
# 在最后一维拼接
c = torch.cat([a, b], dim=-1)
print(c.shape)  # 输出 torch.Size([5, 10, 50])
实现与x[:, :48, ...]等价的操作

...是Python的Ellipsis语法,代表“剩下的所有维度”,在张量切片中直接写x[:, :48, ...]就是合法且高效的写法,主流张量框架(PyTorch、TensorFlow、NumPy)均支持。

如果需要动态构造切片(比如不确定后续维度数量),可手动创建切片元组:

import torch
# 模拟形状为(21,256,*)的张量,这里以4维为例
x = torch.randn(21, 256, 16, 32)
# 直接切片
res1 = x[:, :48, ...]
# 动态构造切片
slice_tuple = (slice(None), slice(None, 48), Ellipsis)
res2 = x[slice_tuple]
# 验证结果一致
print(torch.allclose(res1, res2))  # 输出 True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:09