PyTorch如何对张量中完整向量执行去重获取唯一向量
PyTorch 对张量内整向量维度去重的实现方法
torch.unique 本身就支持按指定维度对整段向量做去重,你之前使用时没有传入维度参数,接口才会默认将张量展平为一维,对单个元素做去重处理。只要指定dim参数即可实现你需要的按行去重效果。
针对你给出的示例,直接运行以下代码即可得到目标输出:
import torch T1 = torch.tensor([[1., 0., 1.], [0., 1., 0.], [1., 0., 1.]]) # dim=0 表示沿第0维度(行方向),对整行向量做去重 # sorted=False 表示保留向量第一次出现的原始顺序,不对结果做值排序 unique_T = torch.unique(T1, dim=0, sorted=False) print(unique_T)
运行输出:
tensor([[1., 0., 1.], [0., 1., 0.]])
参数补充说明
- 如果需要按列对整列向量去重,将
dim参数改为dim=1即可。 - 若不设置
sorted=False,返回的唯一向量会按数值从小到大排序,对应本示例会先返回[0., 1., 0.]再返回[1., 0., 1.],可根据实际需求选择是否开启排序。 - 如果你使用的PyTorch版本低于1.10,没有
sorted参数,可以通过return_index拿到每个唯一向量首次出现的索引,手动还原原始顺序:
unique_vals, first_indices = torch.unique(T1, dim=0, return_index=True) # 按首次出现的索引排序,还原原始顺序 unique_T = unique_vals[first_indices.sort().values]
内容的提问来源于stack exchange,提问作者Brian Formento
相关产品推荐
相关产品推荐

