如何在PyTorch中生成单块含多个值的棋盘格图案
PyTorch 生成自定义块大小的棋盘格
核心实现靠张量广播和取模运算,和numpy简洁实现的逻辑一致,全原生PyTorch操作,无循环,支持自动微分。
对应你给出的2x2方块、4行6列的示例,直接运行下面的代码就能得到完全匹配的结果:
import torch # 可自定义的参数 block_size = 2 # 每个棋盘方块的边长 grid_h, grid_w = 4, 6 # 最终输出棋盘的高、宽 # 坐标分块:同一块内的坐标整除块大小后得到相同索引 y_idx = torch.arange(grid_h) // block_size x_idx = torch.arange(grid_w) // block_size # 广播相加后对2取模,得到交替的0/1棋盘 checkerboard = (y_idx[:, None] + x_idx[None, :]) % 2
打印checkerboard的输出正好和示例一致:
tensor([[1, 1, 0, 0, 1, 1], [1, 1, 0, 0, 1, 1], [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0]])
自定义调整说明
- 调整方块大小:直接修改
block_size的值即可,比如设为3就能生成每个方块为3x3大小的棋盘。 - 翻转棋盘起始值:对结果做取反
1 - checkerboard,就能把左上角块从1变成0,实现整体翻转。 - 替换方块内的填充值:如果不需要0/1填充,用
torch.where做映射即可,比如要让块交替填充3和9:custom_checker = torch.where(checkerboard.bool(), 9, 3) - 适配深度学习张量格式:如果需要BCHW(批量-通道-高-宽)格式的输入,直接用
unsqueeze拓展对应维度即可,不会破坏棋盘的块结构。
内容的提问来源于stack exchange,提问作者John M.
相关产品推荐
相关产品推荐

