Function Differences with torch.randperm

torch.randperm

class torch.randperm(
    n,
    out=None,
    dtype=torch.int64,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

For more information, see torch.randperm.

mindspore.ops.Randperm

class mindspore.ops.Randperm(
    max_length=1,
    pad=-1,
    dtype=mstype.int32
)(n)

For more information, see mindspore.ops.Randperm.

Differences

PyTorch: Returns a random permutation of integers from 0 to n - 1.

MindSpore: Generates n random samples from 0 to n-1 without repeating. If the max_length greater than n, the last max_length-n element will be filled with pad.

Code Example

import torch
from mindspore import ops
import mindspore as ms

# MindSpore
# The result of every execution is different because this operator will generate n random samples.
randperm = ops.Randperm(max_length=30, pad=-1)
n = ms.Tensor([20], dtype=ms.int32)
output = randperm(n)
print(output)
# Out:
# [15 6 11 19 14 16 9 5 13 18 4 10 8 0 17 2 1 12 3 7
#  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]

# PyTorch
torch.randperm(30)
# Out:
# tensor([ 1, 25, 20,  0, 26, 16, 21, 27, 12,  7,  8, 15, 14, 23,  4,  3, 17, 11,
#          9, 13,  5,  6,  2, 28, 19, 22, 24, 10, 29, 18])