0%

pytorch 矩阵操作

矩阵分片取坐标时超出矩阵范围

分片出现小于0的坐标会导致赋值无效

1
2
3
4
5
6
7
8
9
10
y, x = 1, 1
nearby_mask = torch.zeros((6, 6))
nearby_mask[y - 2:y + 2, x - 2:x + 2] = 1
>>>
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]

分片出现大于矩阵尺度的坐标会导致部分赋值

1
2
3
4
5
6
7
8
9
10
y, x = 5, 2
nearby_mask = torch.zeros((6, 6))
nearby_mask[y - 2:y + 2, x - 2:x + 2] = 1
>>>
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.]]

建议写法

1
nearby_mask[max(0, y - 2):y + 2, max(0, x - 2):x + 2] = 1