lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
关于pytorch的tensor的高级索引的一个问题
2019-07-15 22:29:12
3514
0
0
lee-romantic
pytorch中的tensor的高级索引,基本上是与numpy一致的,但是当使用numpy数组,来索引tensor的时候,就会遇到一些坑: 假设idx索引为: ``` idx array([[0], [1], [2]]) ``` a,b分别为形状和值都相同的tensor和ndarray: ``` b =np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) a =torch.tensor(b) ``` idxt为与idx值相同的tensor: ``` idxt =torch.tensor(idx) ``` 按道理来说,`a[idx]` 和`b[idx]`应该是等效的,至少输出的值是一样的,但是: ``` b[idx] array([[[ 1, 2, 3, 4]], [[ 5, 6, 7, 8]], [[ 9, 10, 11, 12]]]) #维度增加了一维 a[idx] Traceback (most recent call last): File "<input>", line 1, in <module> IndexError: too many indices for tensor of dimension 2 ``` `a[idx]`报错,`第二个维度上索引过多???` 但是`a[idxt]`就不会报错,得到的结果值和形状与`b[idx]`一致,只是一个是ndarray,一个是tensor而已,为什么会这样? ###个人理解: ndarray是数组,那么作为tensor的索引的时候,就是当作数,一个一的来索引tensor的,因此当idx为数组 ``` array([[0], [1], [2]]) ``` 时,`a[idx]`实际上相当于,`a[0,1,2]`或者`a[0][1][2]`,如果是写作`a[0][1][2]`或者`a[0,1,2]`这种方式,那么与数组则完全一样了。但是,如果索引idx与被索引的是一样的类型,也就是说,a为tensor,idx也为tensor的话,那么就和numpy的数组高级索引是完全一致的,也就是说,idx为 ``` tensor([[0], [1], [2]]) ``` 时,`a[idx]`就相当于`tensor([a[0],a[1],a[2]])` ``` tensor([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) ``` ###总结 写代码的时候,一定不要混用啊!!! tensor就是tensor,numpy就是numpy,保持一致的风格!!!
上一篇:
DateTimeField字段在html显示的问题
下一篇:
ubuntu下的screen多重视窗管理程序
0
赞
3514 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册