You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何torch.from_numpy()生成的Tensor在不同NumPy数组操作下表现不同?

关于torch.from_numpy()与NumPy数组同步变化的差异解析

torch.from_numpy()生成的PyTorch Tensor与原NumPy数组共享同一块内存空间,这是你观察到不同行为的核心原因,下面分别解析三种赋值操作的区别:

1. array[:] += 1:原地修改原数组内容

这行代码是对数组的切片原地赋值,它直接修改原数组内存中的数值,没有改变array变量指向的内存地址。因为Tensor和原数组共享内存,所以Tensor会同步显示修改后的结果。

对应代码运行结果:

[1 2 3 4 5 6 7 8 9] tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
[ 2  3  4  5  6  7  8  9 10] tensor([ 2,  3,  4,  5,  6,  7,  8,  9, 10])

2. array = array + 1:创建新数组并重新赋值

array + 1会触发NumPy的数组加法运算,生成一个全新的NumPy数组(存储加1后的数值),随后array变量被重新赋值,指向这个新数组的内存地址。而原来和Tensor共享内存的旧数组并未被修改,所以Tensor仍然显示旧数组的数值。

对应代码运行结果:

[1 2 3 4 5 6 7 8 9] tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
[ 2  3  4  5  6  7  8  9 10] tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])

3. array += 1:原地更新原数组

在NumPy中,+=属于原地增量赋值操作(对应array.__iadd__(1)方法),它不会创建新数组,而是直接在原数组的内存空间中修改数值。因此共享内存的Tensor也会同步看到更新后的结果。

内容的提问来源于stack exchange,提问作者leaner18932

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:36:00