PyTorch - 逐元素签名的最小值/最大值?

Posted

技术标签:

【中文标题】PyTorch - 逐元素签名的最小值/最大值?【英文标题】:PyTorch - Element-wise signed min/max? 【发布时间】:2020-07-15 04:06:09 【问题描述】:

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

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

我想过

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

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

【问题讨论】:

如果x 为负数,y 为正数,但绝对值相同,您希望以哪个符号结束? 因为它们是浮动的,我发现这不太可能发生,但在这种情况下,抛硬币可能是解决方案。 【参考方案1】:

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

【讨论】:

谢谢,我认为这可行!我不知道你可以用张量做到这一点。

以上是关于PyTorch - 逐元素签名的最小值/最大值?的主要内容,如果未能解决你的问题,请参考以下文章

最接近某个值的元素(逐元素,numpy 数组)

字节跳动二面 找出最小间断数

python使用heapq快速查找最大或最小的 N 个元素

查找向量的向量的最大值/最小值

八大排序之选择排序

2019 ICPC 南昌网络赛 - Max answer (区间和,区间最值)