如何在Python中对Tensor的第二维度按每3行采样?
Python中Tensor按固定间隔采样的实现方法
核心实现方式
针对形状为[color, frames, height, width]的Tensor,要在**第二维度(帧维度)**实现每3帧采样1帧的需求,直接利用Tensor的索引切片功能即可,核心语法为:tensor[:, ::3, :, :]。其中::3表示从维度起始位置开始,每隔3个元素选取一个。
示例1:高维视频Tensor采样
假设原Tensor尺寸为(3, 300, 10, 10),对应3通道、300帧、10x10分辨率的视频数据:
import torch # 创建示例Tensor original_tensor = torch.randn(3, 300, 10, 10) # 执行每3帧采样1帧的操作 sampled_tensor = original_tensor[:, ::3, :, :] # 查看采样后尺寸 print(sampled_tensor.size()) # 输出: torch.Size([3, 100, 10, 10])
示例2:低维Tensor验证
针对你给出的低维测试Tensor:
# 创建测试Tensor original_tensor = torch.tensor([[1,2,3,4,5,6,7,8,9,10], [1,2,3,4,5,6,7,8,9,10], [1,2,3,4,5,6,7,8,9,10]]) # 在第二维度按每3个元素采样 sampled_tensor = original_tensor[:, ::3] print(sampled_tensor) # 输出结果: # tensor([[ 1, 4, 7, 10], # [ 1, 4, 7, 10], # [ 1, 4, 7, 10]])
补充说明
- 切片语法
start:end:step中,省略start默认从维度索引0开始,省略end默认取到维度最后一个元素,step=3就是设置采样间隔为3。 - 该操作是PyTorch原生支持的高效操作,无需额外依赖,不会产生冗余内存开销。
内容的提问来源于stack exchange,提问作者Alan Chuang
相关产品推荐
相关产品推荐

