Pytorch和numpy的广播规则有什么不同?

2024-04-18 19:16:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我用手电筒做了一些实验,我发现:

  • ( 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)-一个dim不存在
  • (5,3,4,1) and ( 3,1,1) -> (5,3,4,1)-一个dim是1,一个dim不存在
  • ( 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)-一个dim是1,其他dim不存在
  • ( ) 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)-缺少的dim是1
  • ( 4,2) and ( 4)->;不可广播
  • ( 5,2,1) and (5,3,2,1)->;不可广播
  • (5,3,2,1) and ( 5,3,2)->;不可广播

Pytorch文件中说:

Many PyTorch operations support NumPy Broadcasting Semantics.

这是否意味着Pytork遵循numpy的广播规则,它们是相同的还是我也应该尝试numpy?你知道吗

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

我发现的规则是:

  • 从尾部尺寸开始,尺寸必须相等,或者其中一个尺寸应为1(对于缺少的第一个尺寸,假定为1)。你知道吗
  • 对于每个尺寸,结果尺寸是两个尺寸中的最大值。你知道吗
  • 在位操作不允许在位张量改变形状。你知道吗

这似乎是最合理的广播方式,我不明白为什么对numpy来说会有所不同。但也许有一些特点。你知道吗

如果有人能提供证据或者至少能证明numpy和pytorch有相同的规则,那么我会很感激,因为我不必研究numpy的广播行为。你知道吗


Tags: and文件文档gtnumpy规则尺寸torch