[英]Pytorch/Numpy: Subtract each of N elements from a single matrix, resulting in N matrices?
标题中的问题。 有没有一种操作或方法可以在不循环的情况下进行广播? 这是一个带有列表理解的简单示例:
image = torch.tensor([[6, 9], [8.7, 5.5]])
c = torch.tensor([5.7675, 8.8325])
# with list comprehension
desired_result = torch.stack([image - c_i for c_i in c])
# output:
tensor([[[ 0.2325, 3.2325],
[ 2.9325, -0.2675]],
[[-2.8325, 0.1675],
[-0.1325, -3.3325]]])
我尝试过重塑“标量数组”,以各种方式获得所需的结果,但没有运气。
不确定torch
是否有outer
:
- np.subtract.outer(c.numpy(), image.numpy() )
输出:
array([[[ 0.23250008, 3.2325 ],
[ 2.9325 , -0.26749992]],
[[-2.8325005 , 0.16749954],
[-0.13250065, -3.3325005 ]]], dtype=float32)
在 Torch 中,您可以展平两个张量并重塑:
-(c[:,None] - image.ravel()).reshape(*c.shape, *image.shape)
输出:
tensor([[[ 0.2325, 3.2325],
[ 2.9325, -0.2675]],
[[-2.8325, 0.1675],
[-0.1325, -3.3325]]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.