pytorch之张量切片函数index_select介绍

最近加入了一个deeplearning的学习小组开始学习pytorch,初始对这个向量切片函数index_select()感到有些疑惑,经过自己一番实验之后,应该算是懂了吧,和大家一起分享一下实验结果。

index_select有两种用法,一种是将某一个张量(tensor)作为变量传入torch.index_select()函数,还有一个是tensor的内置方法index_select。用法分别是

a=tensor.tensor([1,2])
# first use
c = torch.index_select(a, 1, torch.tensor([0]))
# second use
d = a.index_select(1 , torch.tensor([0]))

这两种用法的区别和python中的sort以及sorted函数有些类似。第一种用法 c会成为一个新的张量且不会和a共用内存,而第二种用法d会和a共用内存 

然后,如何使用这个切片函数呢?首先,我们看一下官方文档的介绍。

torch.index_select(input, dim, index, out=None) → Tensor

沿着指定维度对输入进行切片,取index中指定的相应项(index为一个LongTensor),然后返回到一个新的张量, 返回的张量与原始张量_Tensor_有相同的维度(在指定轴上)。

注意: 返回的张量不与原始张量共享内存空间。

参数:

  • input (Tensor) – 输入张量
  • dim (int) – 索引的轴
  • index (LongTensor) – 包含索引下标的一维张量
  • out (Tensor, optional)
### 调整张量内元素的顺序或相对位置 在 TensorFlow 和 PyTorch 中,可以通过多种方法调整张量内的元素顺序或相对位置。以下是两种框架中的具体实现方式。 #### 使用 PyTorch 进行张量元素重排 PyTorch 提供了灵活的操作接口用于重新排列张量中的元素。例如,`torch.index_select` 可以用来选取特定索引下的元素;`torch.gather` 则允许按照指定维度收集数据[^2]。 下面展示了一个简单的例子: ```python import torch # 创建一个初始张量 tensor = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 定义新的索引顺序 new_indices = torch.tensor([2, 0, 1]) # 按照新索引重新排列列 reordered_tensor = tensor[:, new_indices] print(reordered_tensor) ``` 上述代码片段展示了如何通过 `torch.index_select` 或切片操作来改变二维张量中列的顺序。 #### 使用 TensorFlow 实现类似的张量变换 TensorFlow 同样支持丰富的张量操作函数,比如 `tf.gather`, `tf.transpose` 等,这些都可以帮助我们完成对张量内部结构的重组工作[^1]。 这里给出一段基于 TensorFlow 的示例程序: ```python import tensorflow as tf # 初始化一个 Tensor t = tf.constant([[7, 8, 9], [10, 11, 12]]) # 设定目标次序 perm_order = [2, 0, 1] # 应用 gather 方法依据设定好的 index list 来获取所需的结果 result_t = tf.gather(t, perm_order, axis=1) print(result_t.numpy()) ``` 此段脚本利用了 `tf.gather()` 函数沿着指定轴方向提取子集,并按给定的新排列规则生成最终输出。 ### 总结 无论是选用 TensorFlow 还是 PyTorch ,两者都提供了强大的 API 支持用户自定义地操控其内部存储的数据形式。对于希望更改张量里项目布局的需求而言,熟悉掌握这两个库各自的特性和常用技巧是非常必要的。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值