首页 > 解决方案 > PyTorch - 逐元素签名的最小值/最大值?

问题描述

我可能遗漏了一些明显的东西,但我找不到计算它的方法。

给定两个张量,我想保留每个张量中的最小元素以及符号。

我想过

sign_x = torch.sign(x)
sign_y = torch.sign(y)
min = torch.min(torch.abs(x), torch.abs(y))

为了最终将符号与获得的最小值相乘,但是我没有办法将正确的符号乘以保留的每个元素,并且必须选择两个张量之一。

标签: pythonpytorchminsignabsolute-value

解决方案


这是一种方法。乘以一个布尔值的张量,表示是否torch.sign(x)是计算的结果。然后将两个结果张量的逻辑或 ( ) 组合起来,然后乘以计算。torch.sign(y)xymin|min

mins = torch.min(torch.abs(x), torch.abs(y))

xSigns = (mins == torch.abs(x)) * torch.sign(x)
ySigns = (mins == torch.abs(y)) * torch.sign(y)
finalSigns = xSigns.int() | ySigns.int()

result = mins * finalSigns

如果xy对于某个元素具有相同的绝对值,则在上面的代码中,符号x优先。要y获得优先权,请交换顺序并finalSigns = ySigns.int() | xSigns.int()改为使用。


推荐阅读