Pytorch和Numpy广播规则有区别吗?

时间:2019-06-28 22:35:36

标签: python numpy pytorch

我对火炬进行了一些实验,这是我发现的东西:

  • ( 5,7,3) and ( 5,7,3) -> ( 5,7,3)-相等
  • (5,3,4,1) and (5,3,1,1) -> (5,3,4,1)-昏暗的是1
  • (5,3,4,1) and ( 3,4,1) -> (5,3,4,1)-一个暗处不存在
  • (5,3,4,1) and ( 3,1,1) -> (5,3,4,1)-一种暗淡是1,一种暗淡是不存在
  • ( 4,3,2) and (5,4,1,1) -> (5,4,3,2)
  • ( 4,1) and (5,3,1,1) -> (5,3,4,1)-一种暗淡为1,两种暗淡不存在
  • ( 1) and (5,3,4,2) -> (5,3,4,2)-一种暗淡为1,其他暗淡不存在
  • ( ) and (5,3,4,2) -> (5,3,4,2)-标量和张量
  • ( 0) and (5,3,2,1) -> (5,3,2,0)-空张量和张量
  • ( 4,1) and ( 4) -> ( 4,4)-缺少的昏暗值为1
  • ( 4,2) and ( 4)->无法广播
  • ( 5,2,1) and (5,3,2,1)->无法广播
  • (5,3,2,1) and ( 5,3,2)->无法广播

Pytorch文档说:

  

许多PyTorch操作都支持NumPy广播语义。

这是否意味着pytorch遵循numpy的广播规则,它们是相同的,还是我也应该尝试使用numpy?

numpy的文档没有列出pytourch的特定规则。甚至pytorch的文档也不是完全准确的,例如它说每个张量应该至少具有一个维度,但是torch.empty(3,4) + torch.tensor(42)可以正常工作(标量没有维度)。

我发现的规则是:

  • 从尾随尺寸开始,暗淡大小必须相等或其中之一应为1(假定缺少的第一个暗淡为1)。
  • 对于每个暗淡,最终暗淡是两个中的最大值。
  • 就地操作不允许就地张量改变形状。

这似乎是最合理的广播方式,我不明白为什么对于numpy来说会有所不同。但是也许有一些功能。

如果有人可以提供证明或至少证明numpy具有与pytorch相同的规则,那么我将不胜感激,因为不必研究numpy广播行为。

0 个答案:

没有答案
相关问题