关于tensor

在复现pointnet++的时候遇到了一些问题

关于tensor切片

bl = torch.arange(data.size(0), dtype = torch.long)
tensor[bl, :, :]
tensor[:, :, :]

以上两种切片没什么区别

但作为非第一维就有区别了

一一对应要用一维数组,不要用二维

n_list = torch.randint(0, data.size(1), (data.size(0),), dtype = torch.float32)

tensor[bl, n_list, :] #这样是bl的每个和n_list的每个一一对应
tensor[:, n_list, :] #这样是第一维中的每一个都取n_list里的所有第二维

以下为输出时:

只是如果某一维只有一个值时(指定某一维的某一个行/列,或者像sum一样将某一维整体变为一个数),会默认减少一维

如 (dis是一个三维张量)

例1:

print(dis[:, :, :])

print(dis[:, 1, :])

 例2:

    print(dis[:, :, :])
    print(dis.size())
    print(torch.sum(dis, -1))
    print(torch.sum(dis, -1).size())

对于将二维list作为切片列表

bl = torch.arange(data.size(0), dtype = torch.long)
print(data[bl, ret, :])

若ret是个一维list,则bl和:一样

若ret是个(data.size(0), data.size(1))的二维list,则需要用bl来一一对应

自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/15405785.html