gpt4 book ai didi

python - PyTorch 在张量和 numpy 数组之间的转换 : the addition operation

转载 作者:行者123 更新时间:2023-11-28 22:12:14 25 4
gpt4 key购买 nike

我正在关注 60-minute blitz on PyTorch但对将 numpy 数组转换为张量有疑问。教程示例 here .

这段代码:

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)

产量

[2. 2. 2. 2. 2.]

tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

不过

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
a = a + 1 #the diff is here
print(a)
print(b)

产量

[2. 2. 2. 2. 2.]

tensor([1., 1., 1., 1., 1.], dtype=torch.float64)

为什么输出不同?

最佳答案

这实际上与 PyTorch 关系不大。比较

import numpy as np
a = np.ones(5)
b = a

紧随其后

np.add(a, 1, out=a)
print(b)

a = a + 1
print(b)

np.add(a, 1, out=a)a = a + 1 是有区别的。在前者中,您保留具有不同值(2 而不是 1)的相同对象(数组)a;在后者中,您会得到一个 数组,它绑定(bind)到相同的变量名a 并且具有2 的值。然而,“原始”a 被丢弃,除非有其他东西(b)指向它,否则将被释放。换句话说,第一个操作是就地的,而后者是异地的。由于 b 保留了最初在 a 处找到的数组,因此将 a + 1 重新分配给 a 不会影响b 的值。另一种就地突变语法是

a[:] = a + 1
print(b)

关于PyTorch,很简单。 from_numpy 创建一个为实际对象(数组)起别名的张量,因此它等同于我第一个代码段中的 b = a 行。张量将跟踪调用时名为 a 的数组的变化,而不是名称 a 指向的变化。

关于python - PyTorch 在张量和 numpy 数组之间的转换 : the addition operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55040217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com