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

如何用一维张量替代标量对二维张量进行切片?

按行指定长度切片二维张量(PyTorch实现)

在PyTorch里,常规的t[:, :k]只能给所有行统一设置切片长度,但要实现每行按自定义长度切片,用掩码处理是最直接的方案,具体实现如下:

实现思路

  • 生成对应每个元素的行、列索引,通过广播机制让索引矩阵和原张量形状匹配
  • 创建布尔掩码,标记每行中需要保留的元素(列索引小于该行指定的切片长度)
  • 初始化结果张量,用NaN或0填充未保留的位置,再将掩码标记的区域替换为原张量的值

代码示例

import torch

# 初始化输入张量(修正原示例的张量创建语法错误)
t = torch.tensor([[1, 1, 1], [2, 2, 2], [3, 3, 3]], dtype=torch.float32)
# 每行的目标切片长度,转为整数张量
k = torch.tensor([1, 2, 3])

# 生成行、列索引矩阵
rows = torch.arange(t.shape[0]).unsqueeze(1)  # 形状 (3,1)
cols = torch.arange(t.shape[1]).unsqueeze(0)  # 形状 (1,3)

# 生成掩码:判断每个位置的列索引是否小于对应行的切片长度
mask = cols < k[rows]

# 初始化结果张量,用NaN填充(替换为0即可实现0掩码)
result = torch.full_like(t, float('nan'))
# 保留掩码标记的元素
result[mask] = t[mask]

print(result)

输出结果

tensor([[1., nan, nan],
        [2., 2., nan],
        [3., 3., 3.]])

内容的提问来源于stack exchange,提问作者David Davíd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:46:09