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

能否在PyTorch张量中通过引用方式删除元素?

PyTorch张量删除元素能否保持原内存地址?

核心结论

不行。PyTorch张量底层是连续内存块的数组实现,而非链表结构。数组要求元素在内存中连续存储,删除中间位置元素时,后续元素必须前移填补空缺,这必然需要重新分配内存或复制数据,无法让新张量与原张量共享同一内存地址。

你试过的方法为何都会创建副本

  • 方法1:torch.cat((data[:i], data[i+1:]))
    切片data[:i]和data[i+1:]本身是原张量的视图(共享内存),但torch.cat需要将这两个不连续的内存块拼接成新的连续内存块,因此必须复制数据生成新张量。
  • 方法2:data[torch.LongTensor(indices_to_keep)]
    这种属于高级索引(非连续索引),PyTorch中高级索引不会返回视图,而是直接创建新张量并复制对应数据,所以内存地址必然不同。

唯一例外:删除最后一个元素

如果只是删除张量的最后一个元素,可以用连续切片data[:-1],此时返回的是原张量的视图,与原张量共享内存地址:

import torch
data = torch.tensor([1, 2, 3, 4])
new_data = data[:-1]
print(new_data.data_ptr() == data.data_ptr())  # 输出 True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:01