Python 如何使用PyTorch快速反转排列?
我不知道如何快速恢复排列洗牌的数组 示例#1:Python 如何使用PyTorch快速反转排列?,python,pytorch,permutation,inverse,Python,Pytorch,Permutation,Inverse,我不知道如何快速恢复排列洗牌的数组 示例#1: [x,y,z]经过P:[2,0,1]洗牌,我们将获得[z,x,y] 相应的反比应该是P^-1:[1,2,0] 示例#2: [a,b,c,d,e,f]被P:[5,2,0,1,4,3]洗牌,然后我们将得到[f,c,a,b,e,d] 相应的反比应该是P^-1:[2,3,1,5,4,0] 我写了以下基于矩阵乘法的代码(置换矩阵的转置是它的逆),但是当我在模型训练中使用它时,这种方法太慢了。是否存在更快的实现 导入火炬 n=10 x=火炬张量(列表(
经过[x,y,z]
洗牌,我们将获得P:[2,0,1]
[z,x,y]
- 相应的反比应该是
P^-1:[1,2,0]
被[a,b,c,d,e,f]
洗牌,然后我们将得到P:[5,2,0,1,4,3]
[f,c,a,b,e,d]
- 相应的反比应该是
P^-1:[2,3,1,5,4,0]
导入火炬
n=10
x=火炬张量(列表(范围(n)))
打印('原始数组',x)
random_perm_index=torch.randperm(n).long()
perm_矩阵=torch.eye(n)[随机perm_索引].t()
x=x[随机排列指数]
打印('Shuffled',x)
恢复索引=火炬。张量(列表(范围(n))。视图(n,1)
restore_index=perm_matrix.mm(restore_index).view(n).long()
x=x[恢复索引]
打印('Restored',x)
我在年获得了解决方案
>>> import torch
>>> torch.__version__
'1.7.1'
>>> p1 = torch.tensor ([2, 0, 1])
>>> torch.argsort (p1)
tensor([1, 2, 0])
>>> p2 = torch.tensor ([5, 2, 0, 1, 4, 3])
>>> torch.argsort (p2)
tensor([2, 3, 1, 5, 4, 0])