s-m*_*m-e 3 python numpy python-3.x pytorch
给定一个数组a:
a = np.arange(1, 11, dtype = 'float32')
Run Code Online (Sandbox Code Playgroud)
使用numpy,我可以执行以下操作:
np.divide(1.0, a, out = a)
Run Code Online (Sandbox Code Playgroud)
导致:
array([1. , 0.5 , 0.33333334, 0.25 , 0.2 ,
0.16666667, 0.14285715, 0.125 , 0.11111111, 0.1 ],
dtype=float32)
Run Code Online (Sandbox Code Playgroud)
假设它a是pytorch张量,则以下操作失败:
torch.div(1.0, a, out = a)
Run Code Online (Sandbox Code Playgroud)
的第一个参数div应为匹配长度/形状的张量。
如果我1.0用b填充为1 的数组代替,则其长度等于的长度a,它可以工作。缺点是我必须为分配内存b。我也可以做类似的事情a = 1.0 / a,它将再次分配额外的(临时)内存。
如何理想地在广播中有效地“就地”执行此操作(无需分配额外的内存)?
小智 5
Pytorch遵循_就地操作使用的惯例。例如
add -> add_ # in-place equivalent
div -> div_ # in-place equivalent
etc
Run Code Online (Sandbox Code Playgroud)
逐个元素就位逆。
>>> a = torch.arange(1, 11, dtype=torch.float32)
>>> a.pow_(-1)
>>> a
>>> tensor([1.0000, 0.5000, 0.3333, 0.2500, 0.2000, 0.1667, 0.1429, 0.1250, 0.1111, 0.1000])
Run Code Online (Sandbox Code Playgroud)
>>> a = torch.arange(1, 11, dtype=torch.float32)
>>> a.div_(a ** a)
>>> a
>>> tensor([1.0000, 0.5000, 0.3333, 0.2500, 0.2000, 0.1667, 0.1429, 0.1250, 0.1111, 0.1000])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |