给定pytorch中的任意两个对角坐标,在一批张量中获取靠近原点的矩形角

Get corner of rectangle near to origin in batch of tensor given any two diagonal coordinates in pytorch

假设我有一批非对角线元素坐标的 pytorch 张量,我想获得靠近原点的角的坐标。坐标为 (x1, y1, x2, y2) 形式。

a = torch.tensor([[3,2,2,3], [1,1,2,2])
# expected output
[[2,2], [1,1]]

您可以遍历所有张量,并为每个张量计算到四个角的距离,并取最小距离的角。

import torch
a = torch.tensor([[3,2,2,3], [1,1,2,2]])
c = torch.zeros(a.shape[0], 2)
for idx, x in enumerate(a):
    d1 = x[0] ** 2 + x[1] ** 2
    d2 = x[2] ** 2 + x[3] ** 2
    d3 = x[0] ** 2 + x[3] ** 2
    d4 = x[2] ** 2 + x[1] ** 2
    dmin = min(d1, d2, d3, d4)
    if d1 == dmin:
        c[idx] = torch.tensor([x[0], x[1]])
    elif d2 == dmin:
        c[idx] = torch.tensor([x[2], x[3]])
    elif d3 == dmin:
        c[idx] = torch.tensor([x[0], x[3]])
    elif d4 == dmin:
        c[idx] = torch.tensor([x[2], x[1]])
print(c)  # tensor([[2., 2.], [1., 1.]])