Y和*Y之间有什么区别吗?其中Y是用作输入参数的列表



我使用的是torch.tensor.rerepeat((

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
period = x.size(1)
repeats = [1,2]
result = x.repeat(*repeats)

结果是

tensor([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])

如果我得到如下的结果

result = x.repeat(repeats)

结果是相同的

tensor([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])

CCD_ 1和CCD_。

这是否意味着,对于输入参数,例如Y,我可以使用Y*Y

Kinda。如果repeatsints的(listtuple(,则它是等价的。但总的来说,规则似乎是:

  • 如果第一个参数是x.repeat(repeats)0或tuple,则将其作为repeats。忽略所有其他参数
  • 否则,将完整的*args作为repeats

因此,如果您的repeatsrepeats=((1,2),(3,4))类似,那么a.repeat(*repeats)成功,与a.repeat(1, 2)==a.repeat((1, 2))a.repeat(repeats)失败相同。

注:这是基于我自己测试的观察结果。唯一的官方文档是函数的定义类型,例如x.repeat(*repeats)0,它在语义方面并不完全清楚。


您也可以得到这样的错误消息:

TypeError: repeat(): argument 'repeats' (position 1) must be tuple of ints, not tuple

当你通过浮子时。一般来说,错误报告可能会更好。

最新更新